|
|
@ -875,6 +875,16 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
|
|
|
|
return root;
|
|
|
|
return root;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
|
|
|
|
TreeNode* getInOrderNext(TreeNode* node) {
|
|
|
|
|
|
|
|
if (node == nullptr) return node;
|
|
|
|
|
|
|
|
// 循环访问左子结点,直到叶结点时为最小结点,跳出
|
|
|
|
|
|
|
|
while (node->left != nullptr) {
|
|
|
|
|
|
|
|
node = node->left;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return node;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* 递归删除结点(辅助函数) */
|
|
|
|
/* 递归删除结点(辅助函数) */
|
|
|
|
TreeNode* removeHelper(TreeNode* node, int val) {
|
|
|
|
TreeNode* removeHelper(TreeNode* node, int val) {
|
|
|
|
if (node == nullptr) return nullptr;
|
|
|
|
if (node == nullptr) return nullptr;
|
|
|
@ -965,6 +975,18 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
|
|
|
|
// 返回子树的根结点
|
|
|
|
// 返回子树的根结点
|
|
|
|
return node
|
|
|
|
return node
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
|
|
|
|
func getInOrderNext(node *TreeNode) *TreeNode {
|
|
|
|
|
|
|
|
if node == nil {
|
|
|
|
|
|
|
|
return node
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 循环访问左子结点,直到叶结点时为最小结点,跳出
|
|
|
|
|
|
|
|
for node.Left != nil {
|
|
|
|
|
|
|
|
node = node.Left
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return node
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
=== "JavaScript"
|
|
|
|
=== "JavaScript"
|
|
|
@ -1003,16 +1025,6 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
|
|
|
|
return node;
|
|
|
|
return node;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
|
|
|
|
getInOrderNext(node) {
|
|
|
|
|
|
|
|
if (node === null) return node;
|
|
|
|
|
|
|
|
// 循环访问左子结点,直到叶结点时为最小结点,跳出
|
|
|
|
|
|
|
|
while (node.left !== null) {
|
|
|
|
|
|
|
|
node = node.left;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return node;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
getInOrderNext(node) {
|
|
|
|
getInOrderNext(node) {
|
|
|
|
if (node === null) return node;
|
|
|
|
if (node === null) return node;
|
|
|
@ -1137,6 +1149,19 @@ AVL 树的独特之处在于「旋转 Rotation」的操作,其可 **在不影
|
|
|
|
// 返回子树的根结点
|
|
|
|
// 返回子树的根结点
|
|
|
|
return node
|
|
|
|
return node
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* 获取中序遍历中的下一个结点(仅适用于 root 有左子结点的情况) */
|
|
|
|
|
|
|
|
private func getInOrderNext(node: TreeNode?) -> TreeNode? {
|
|
|
|
|
|
|
|
var node = node
|
|
|
|
|
|
|
|
if node == nil {
|
|
|
|
|
|
|
|
return node
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
// 循环访问左子结点,直到叶结点时为最小结点,跳出
|
|
|
|
|
|
|
|
while node?.left != nil {
|
|
|
|
|
|
|
|
node = node?.left
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return node
|
|
|
|
|
|
|
|
}
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
=== "Zig"
|
|
|
|
=== "Zig"
|
|
|
|