Update binary_search_tree.go
This commit is contained in:
parent
7d0d3df886
commit
55b65dc806
@ -68,13 +68,13 @@ func (bst *binarySearchTree) insert(num int) *TreeNode {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// 待插入结点之前的结点位置
|
// 待插入结点之前的结点位置
|
||||||
var prev *TreeNode = nil
|
var pre *TreeNode = nil
|
||||||
// 循环查找,越过叶结点后跳出
|
// 循环查找,越过叶结点后跳出
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
if cur.Val == num {
|
if cur.Val == num {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
prev = cur
|
pre = cur
|
||||||
if cur.Val < num {
|
if cur.Val < num {
|
||||||
cur = cur.Right
|
cur = cur.Right
|
||||||
} else {
|
} else {
|
||||||
@ -83,10 +83,10 @@ func (bst *binarySearchTree) insert(num int) *TreeNode {
|
|||||||
}
|
}
|
||||||
// 插入结点
|
// 插入结点
|
||||||
node := NewTreeNode(num)
|
node := NewTreeNode(num)
|
||||||
if prev.Val < num {
|
if pre.Val < num {
|
||||||
prev.Right = node
|
pre.Right = node
|
||||||
} else {
|
} else {
|
||||||
prev.Left = node
|
pre.Left = node
|
||||||
}
|
}
|
||||||
return cur
|
return cur
|
||||||
}
|
}
|
||||||
@ -99,13 +99,13 @@ func (bst *binarySearchTree) remove(num int) *TreeNode {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// 待删除结点之前的结点位置
|
// 待删除结点之前的结点位置
|
||||||
var prev *TreeNode = nil
|
var pre *TreeNode = nil
|
||||||
// 循环查找,越过叶结点后跳出
|
// 循环查找,越过叶结点后跳出
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
if cur.Val == num {
|
if cur.Val == num {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
prev = cur
|
pre = cur
|
||||||
if cur.Val < num {
|
if cur.Val < num {
|
||||||
// 待删除结点在右子树中
|
// 待删除结点在右子树中
|
||||||
cur = cur.Right
|
cur = cur.Right
|
||||||
@ -128,10 +128,10 @@ func (bst *binarySearchTree) remove(num int) *TreeNode {
|
|||||||
child = cur.Right
|
child = cur.Right
|
||||||
}
|
}
|
||||||
// 将子结点替换为待删除结点
|
// 将子结点替换为待删除结点
|
||||||
if prev.Left == cur {
|
if pre.Left == cur {
|
||||||
prev.Left = child
|
pre.Left = child
|
||||||
} else {
|
} else {
|
||||||
prev.Right = child
|
pre.Right = child
|
||||||
}
|
}
|
||||||
// 子结点数为 2
|
// 子结点数为 2
|
||||||
} else {
|
} else {
|
||||||
|
@ -329,13 +329,13 @@ comments: true
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// 待插入结点之前的结点位置
|
// 待插入结点之前的结点位置
|
||||||
var prev *TreeNode = nil
|
var pre *TreeNode = nil
|
||||||
// 循环查找,越过叶结点后跳出
|
// 循环查找,越过叶结点后跳出
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
if cur.Val == num {
|
if cur.Val == num {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
prev = cur
|
pre = cur
|
||||||
if cur.Val < num {
|
if cur.Val < num {
|
||||||
cur = cur.Right
|
cur = cur.Right
|
||||||
} else {
|
} else {
|
||||||
@ -344,10 +344,10 @@ comments: true
|
|||||||
}
|
}
|
||||||
// 插入结点
|
// 插入结点
|
||||||
node := NewTreeNode(num)
|
node := NewTreeNode(num)
|
||||||
if prev.Val < num {
|
if pre.Val < num {
|
||||||
prev.Right = node
|
pre.Right = node
|
||||||
} else {
|
} else {
|
||||||
prev.Left = node
|
pre.Left = node
|
||||||
}
|
}
|
||||||
return cur
|
return cur
|
||||||
}
|
}
|
||||||
@ -495,7 +495,7 @@ comments: true
|
|||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
为了插入结点,需要借助 **辅助结点 `prev`** 保存上一轮循环的结点,这样在遍历到 $\text{null}$ 时,我们也可以获取到其父结点,从而完成结点插入操作。
|
为了插入结点,需要借助 **辅助结点 `pre`** 保存上一轮循环的结点,这样在遍历到 $\text{null}$ 时,我们也可以获取到其父结点,从而完成结点插入操作。
|
||||||
|
|
||||||
与查找结点相同,插入结点使用 $O(\log n)$ 时间。
|
与查找结点相同,插入结点使用 $O(\log n)$ 时间。
|
||||||
|
|
||||||
@ -714,13 +714,13 @@ comments: true
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
// 待删除结点之前的结点位置
|
// 待删除结点之前的结点位置
|
||||||
var prev *TreeNode = nil
|
var pre *TreeNode = nil
|
||||||
// 循环查找,越过叶结点后跳出
|
// 循环查找,越过叶结点后跳出
|
||||||
for cur != nil {
|
for cur != nil {
|
||||||
if cur.Val == num {
|
if cur.Val == num {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
prev = cur
|
pre = cur
|
||||||
if cur.Val < num {
|
if cur.Val < num {
|
||||||
// 待删除结点在右子树中
|
// 待删除结点在右子树中
|
||||||
cur = cur.Right
|
cur = cur.Right
|
||||||
@ -743,10 +743,10 @@ comments: true
|
|||||||
child = cur.Right
|
child = cur.Right
|
||||||
}
|
}
|
||||||
// 将子结点替换为待删除结点
|
// 将子结点替换为待删除结点
|
||||||
if prev.Left == cur {
|
if pre.Left == cur {
|
||||||
prev.Left = child
|
pre.Left = child
|
||||||
} else {
|
} else {
|
||||||
prev.Right = child
|
pre.Right = child
|
||||||
}
|
}
|
||||||
// 子结点数为 2
|
// 子结点数为 2
|
||||||
} else {
|
} else {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user