mirror of
				https://github.com/krahets/hello-algo.git
				synced 2025-11-04 14:18:20 +08:00 
			
		
		
		
	Update the comments in
binary_search_tree and avl_tree.
This commit is contained in:
		@ -203,10 +203,10 @@ TreeNode *search(avlTree *tree, int val) {
 | 
				
			|||||||
    // 循环查找,越过叶结点后跳出
 | 
					    // 循环查找,越过叶结点后跳出
 | 
				
			||||||
    while (cur != NULL) {
 | 
					    while (cur != NULL) {
 | 
				
			||||||
        if (cur->val < val) {
 | 
					        if (cur->val < val) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            cur = cur->right;
 | 
					            cur = cur->right;
 | 
				
			||||||
        } else if (cur->val > val) {
 | 
					        } else if (cur->val > val) {
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            cur = cur->left;
 | 
					            cur = cur->left;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -53,11 +53,11 @@ TreeNode *search(binarySearchTree *bst, int num) {
 | 
				
			|||||||
    TreeNode *cur = bst->root;
 | 
					    TreeNode *cur = bst->root;
 | 
				
			||||||
    // 循环查找,越过叶结点后跳出
 | 
					    // 循环查找,越过叶结点后跳出
 | 
				
			||||||
    while (cur != NULL) {
 | 
					    while (cur != NULL) {
 | 
				
			||||||
        // 目标结点在 root 的右子树中
 | 
					 | 
				
			||||||
        if (cur->val < num) {
 | 
					        if (cur->val < num) {
 | 
				
			||||||
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            cur = cur->right;
 | 
					            cur = cur->right;
 | 
				
			||||||
        } else if (cur->val > num) {
 | 
					        } else if (cur->val > num) {
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            cur = cur->left;
 | 
					            cur = cur->left;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
@ -81,10 +81,10 @@ TreeNode *insert(binarySearchTree *bst, int num) {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        pre = cur;
 | 
					        pre = cur;
 | 
				
			||||||
        if (cur->val < num) {
 | 
					        if (cur->val < num) {
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            cur = cur->right;
 | 
					            cur = cur->right;
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            cur = cur->left;
 | 
					            cur = cur->left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -43,9 +43,9 @@ public:
 | 
				
			|||||||
        TreeNode* cur = root;
 | 
					        TreeNode* cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != nullptr) {
 | 
					        while (cur != nullptr) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur->val < num) cur = cur->right;
 | 
					            if (cur->val < num) cur = cur->right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur->val > num) cur = cur->left;
 | 
					            else if (cur->val > num) cur = cur->left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -64,9 +64,9 @@ public:
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur->val == num) return nullptr;
 | 
					            if (cur->val == num) return nullptr;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur->val < num) cur = cur->right;
 | 
					            if (cur->val < num) cur = cur->right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur->left;
 | 
					            else cur = cur->left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
 | 
				
			|||||||
@ -193,10 +193,10 @@ namespace hello_algo.chapter_tree
 | 
				
			|||||||
            // 循环查找,越过叶结点后跳出
 | 
					            // 循环查找,越过叶结点后跳出
 | 
				
			||||||
            while (cur != null)
 | 
					            while (cur != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // 目标结点在 root 的右子树中
 | 
					                // 目标结点在 cur 的右子树中
 | 
				
			||||||
                if (cur.val < val)
 | 
					                if (cur.val < val)
 | 
				
			||||||
                    cur = cur.right;
 | 
					                    cur = cur.right;
 | 
				
			||||||
                // 目标结点在 root 的左子树中
 | 
					                // 目标结点在 cur 的左子树中
 | 
				
			||||||
                else if (cur.val > val)
 | 
					                else if (cur.val > val)
 | 
				
			||||||
                    cur = cur.left;
 | 
					                    cur = cur.left;
 | 
				
			||||||
                // 找到目标结点,跳出循环
 | 
					                // 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -42,9 +42,9 @@ namespace hello_algo.chapter_tree
 | 
				
			|||||||
            // 循环查找,越过叶结点后跳出
 | 
					            // 循环查找,越过叶结点后跳出
 | 
				
			||||||
            while (cur != null)
 | 
					            while (cur != null)
 | 
				
			||||||
            {
 | 
					            {
 | 
				
			||||||
                // 目标结点在 root 的右子树中
 | 
					                // 目标结点在 cur 的右子树中
 | 
				
			||||||
                if (cur.val < num) cur = cur.right;
 | 
					                if (cur.val < num) cur = cur.right;
 | 
				
			||||||
                // 目标结点在 root 的左子树中
 | 
					                // 目标结点在 cur 的左子树中
 | 
				
			||||||
                else if (cur.val > num) cur = cur.left;
 | 
					                else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
                // 找到目标结点,跳出循环
 | 
					                // 找到目标结点,跳出循环
 | 
				
			||||||
                else break;
 | 
					                else break;
 | 
				
			||||||
@ -65,9 +65,9 @@ namespace hello_algo.chapter_tree
 | 
				
			|||||||
                // 找到重复结点,直接返回
 | 
					                // 找到重复结点,直接返回
 | 
				
			||||||
                if (cur.val == num) return null;
 | 
					                if (cur.val == num) return null;
 | 
				
			||||||
                pre = cur;
 | 
					                pre = cur;
 | 
				
			||||||
                // 插入位置在 root 的右子树中
 | 
					                // 插入位置在 cur 的右子树中
 | 
				
			||||||
                if (cur.val < num) cur = cur.right;
 | 
					                if (cur.val < num) cur = cur.right;
 | 
				
			||||||
                // 插入位置在 root 的左子树中
 | 
					                // 插入位置在 cur 的左子树中
 | 
				
			||||||
                else cur = cur.left;
 | 
					                else cur = cur.left;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -195,11 +195,11 @@ func (t *avlTree) search(val int) *TreeNode {
 | 
				
			|||||||
	cur := t.root
 | 
						cur := t.root
 | 
				
			||||||
	// 循环查找,越过叶结点后跳出
 | 
						// 循环查找,越过叶结点后跳出
 | 
				
			||||||
	for cur != nil {
 | 
						for cur != nil {
 | 
				
			||||||
		// 目标结点在 root 的右子树中
 | 
					 | 
				
			||||||
		if cur.Val < val {
 | 
							if cur.Val < val {
 | 
				
			||||||
 | 
								// 目标结点在 cur 的右子树中
 | 
				
			||||||
			cur = cur.Right
 | 
								cur = cur.Right
 | 
				
			||||||
		} else if cur.Val > val {
 | 
							} else if cur.Val > val {
 | 
				
			||||||
			// 目标结点在 root 的左子树中
 | 
								// 目标结点在 cur 的左子树中
 | 
				
			||||||
			cur = cur.Left
 | 
								cur = cur.Left
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			// 找到目标结点,跳出循环
 | 
								// 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -46,10 +46,10 @@ func (bst *binarySearchTree) search(num int) *TreeNode {
 | 
				
			|||||||
	// 循环查找,越过叶结点后跳出
 | 
						// 循环查找,越过叶结点后跳出
 | 
				
			||||||
	for node != nil {
 | 
						for node != nil {
 | 
				
			||||||
		if node.Val < num {
 | 
							if node.Val < num {
 | 
				
			||||||
			// 目标结点在 root 的右子树中
 | 
								// 目标结点在 cur 的右子树中
 | 
				
			||||||
			node = node.Right
 | 
								node = node.Right
 | 
				
			||||||
		} else if node.Val > num {
 | 
							} else if node.Val > num {
 | 
				
			||||||
			// 目标结点在 root 的左子树中
 | 
								// 目标结点在 cur 的左子树中
 | 
				
			||||||
			node = node.Left
 | 
								node = node.Left
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			// 找到目标结点,跳出循环
 | 
								// 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -165,10 +165,10 @@ class AVLTree {
 | 
				
			|||||||
        TreeNode cur = root;
 | 
					        TreeNode cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != null) {
 | 
					        while (cur != null) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < val)
 | 
					            if (cur.val < val)
 | 
				
			||||||
                cur = cur.right;
 | 
					                cur = cur.right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur.val > val)
 | 
					            else if (cur.val > val)
 | 
				
			||||||
                cur = cur.left;
 | 
					                cur = cur.left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -40,9 +40,9 @@ class BinarySearchTree {
 | 
				
			|||||||
        TreeNode cur = root;
 | 
					        TreeNode cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != null) {
 | 
					        while (cur != null) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur.val > num) cur = cur.left;
 | 
					            else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -61,9 +61,9 @@ class BinarySearchTree {
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur.val == num) return null;
 | 
					            if (cur.val == num) return null;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur.left;
 | 
					            else cur = cur.left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
 | 
				
			|||||||
@ -37,9 +37,9 @@ function search(num) {
 | 
				
			|||||||
    let cur = root;
 | 
					    let cur = root;
 | 
				
			||||||
    // 循环查找,越过叶结点后跳出
 | 
					    // 循环查找,越过叶结点后跳出
 | 
				
			||||||
    while (cur !== null) {
 | 
					    while (cur !== null) {
 | 
				
			||||||
        // 目标结点在 root 的右子树中
 | 
					        // 目标结点在 cur 的右子树中
 | 
				
			||||||
        if (cur.val < num) cur = cur.right;
 | 
					        if (cur.val < num) cur = cur.right;
 | 
				
			||||||
        // 目标结点在 root 的左子树中
 | 
					        // 目标结点在 cur 的左子树中
 | 
				
			||||||
        else if (cur.val > num) cur = cur.left;
 | 
					        else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
        // 找到目标结点,跳出循环
 | 
					        // 找到目标结点,跳出循环
 | 
				
			||||||
        else break;
 | 
					        else break;
 | 
				
			||||||
@ -58,9 +58,9 @@ function insert(num) {
 | 
				
			|||||||
        // 找到重复结点,直接返回
 | 
					        // 找到重复结点,直接返回
 | 
				
			||||||
        if (cur.val === num) return null;
 | 
					        if (cur.val === num) return null;
 | 
				
			||||||
        pre = cur;
 | 
					        pre = cur;
 | 
				
			||||||
        // 插入位置在 root 的右子树中
 | 
					        // 插入位置在 cur 的右子树中
 | 
				
			||||||
        if (cur.val < num) cur = cur.right;
 | 
					        if (cur.val < num) cur = cur.right;
 | 
				
			||||||
        // 插入位置在 root 的左子树中
 | 
					        // 插入位置在 cur 的左子树中
 | 
				
			||||||
        else cur = cur.left;
 | 
					        else cur = cur.left;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // 插入结点 val
 | 
					    // 插入结点 val
 | 
				
			||||||
 | 
				
			|||||||
@ -152,10 +152,10 @@ class AVLTree:
 | 
				
			|||||||
        cur = self.root
 | 
					        cur = self.root
 | 
				
			||||||
        # 循环查找,越过叶结点后跳出
 | 
					        # 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while cur is not None:
 | 
					        while cur is not None:
 | 
				
			||||||
            # 目标结点在 root 的右子树中
 | 
					            # 目标结点在 cur 的右子树中
 | 
				
			||||||
            if cur.val < val:
 | 
					            if cur.val < val:
 | 
				
			||||||
                cur = cur.right
 | 
					                cur = cur.right
 | 
				
			||||||
            # 目标结点在 root 的左子树中
 | 
					            # 目标结点在 cur 的左子树中
 | 
				
			||||||
            elif cur.val > val:
 | 
					            elif cur.val > val:
 | 
				
			||||||
                cur = cur.left
 | 
					                cur = cur.left
 | 
				
			||||||
            # 找到目标结点,跳出循环
 | 
					            # 找到目标结点,跳出循环
 | 
				
			||||||
 | 
				
			|||||||
@ -37,10 +37,10 @@ class BinarySearchTree:
 | 
				
			|||||||
        cur = self.root
 | 
					        cur = self.root
 | 
				
			||||||
        # 循环查找,越过叶结点后跳出
 | 
					        # 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while cur is not None:
 | 
					        while cur is not None:
 | 
				
			||||||
            # 目标结点在 root 的右子树中
 | 
					            # 目标结点在 cur 的右子树中
 | 
				
			||||||
            if cur.val < num:
 | 
					            if cur.val < num:
 | 
				
			||||||
                cur = cur.right
 | 
					                cur = cur.right
 | 
				
			||||||
            # 目标结点在 root 的左子树中
 | 
					            # 目标结点在 cur 的左子树中
 | 
				
			||||||
            elif cur.val > num:
 | 
					            elif cur.val > num:
 | 
				
			||||||
                cur = cur.left
 | 
					                cur = cur.left
 | 
				
			||||||
            # 找到目标结点,跳出循环
 | 
					            # 找到目标结点,跳出循环
 | 
				
			||||||
@ -64,10 +64,11 @@ class BinarySearchTree:
 | 
				
			|||||||
            if cur.val == num:
 | 
					            if cur.val == num:
 | 
				
			||||||
                return None
 | 
					                return None
 | 
				
			||||||
            pre = cur
 | 
					            pre = cur
 | 
				
			||||||
 | 
					            # 插入位置在 cur 的右子树中
 | 
				
			||||||
            if cur.val < num:  # 插入位置在 root 的右子树中
 | 
					            if cur.val < num:
 | 
				
			||||||
                cur = cur.right
 | 
					                cur = cur.right
 | 
				
			||||||
            else:  # 插入位置在 root 的左子树中
 | 
					            # 插入位置在 cur 的左子树中
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
                cur = cur.left
 | 
					                cur = cur.left
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # 插入结点 val
 | 
					        # 插入结点 val
 | 
				
			||||||
 | 
				
			|||||||
@ -40,9 +40,9 @@ function search(num: number): TreeNode | null {
 | 
				
			|||||||
    // 循环查找,越过叶结点后跳出
 | 
					    // 循环查找,越过叶结点后跳出
 | 
				
			||||||
    while (cur !== null) {
 | 
					    while (cur !== null) {
 | 
				
			||||||
        if (cur.val < num) {
 | 
					        if (cur.val < num) {
 | 
				
			||||||
            cur = cur.right; // 目标结点在 root 的右子树中
 | 
					            cur = cur.right; // 目标结点在 cur 的右子树中
 | 
				
			||||||
        } else if (cur.val > num) {
 | 
					        } else if (cur.val > num) {
 | 
				
			||||||
            cur = cur.left; // 目标结点在 root 的左子树中
 | 
					            cur = cur.left; // 目标结点在 cur 的左子树中
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            break; // 找到目标结点,跳出循环
 | 
					            break; // 找到目标结点,跳出循环
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@ -66,9 +66,9 @@ function insert(num: number): TreeNode | null {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        pre = cur;
 | 
					        pre = cur;
 | 
				
			||||||
        if (cur.val < num) {
 | 
					        if (cur.val < num) {
 | 
				
			||||||
            cur = cur.right as TreeNode; // 插入位置在 root 的右子树中
 | 
					            cur = cur.right as TreeNode; // 插入位置在 cur 的右子树中
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
            cur = cur.left as TreeNode; // 插入位置在 root 的左子树中
 | 
					            cur = cur.left as TreeNode; // 插入位置在 cur 的左子树中
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    // 插入结点 val
 | 
					    // 插入结点 val
 | 
				
			||||||
 | 
				
			|||||||
@ -43,9 +43,9 @@ comments: true
 | 
				
			|||||||
        TreeNode cur = root;
 | 
					        TreeNode cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != null) {
 | 
					        while (cur != null) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur.val > num) cur = cur.left;
 | 
					            else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -63,9 +63,9 @@ comments: true
 | 
				
			|||||||
        TreeNode* cur = root;
 | 
					        TreeNode* cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != nullptr) {
 | 
					        while (cur != nullptr) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur->val < num) cur = cur->right;
 | 
					            if (cur->val < num) cur = cur->right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur->val > num) cur = cur->left;
 | 
					            else if (cur->val > num) cur = cur->left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -83,10 +83,10 @@ comments: true
 | 
				
			|||||||
        cur = self.root
 | 
					        cur = self.root
 | 
				
			||||||
        # 循环查找,越过叶结点后跳出
 | 
					        # 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while cur is not None:
 | 
					        while cur is not None:
 | 
				
			||||||
            # 目标结点在 root 的右子树中
 | 
					            # 目标结点在 cur 的右子树中
 | 
				
			||||||
            if cur.val < num:
 | 
					            if cur.val < num:
 | 
				
			||||||
                cur = cur.right
 | 
					                cur = cur.right
 | 
				
			||||||
            # 目标结点在 root 的左子树中
 | 
					            # 目标结点在 cur 的左子树中
 | 
				
			||||||
            elif cur.val > num:
 | 
					            elif cur.val > num:
 | 
				
			||||||
                cur = cur.left
 | 
					                cur = cur.left
 | 
				
			||||||
            # 找到目标结点,跳出循环
 | 
					            # 找到目标结点,跳出循环
 | 
				
			||||||
@ -104,10 +104,10 @@ comments: true
 | 
				
			|||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        for node != nil {
 | 
					        for node != nil {
 | 
				
			||||||
            if node.Val < num {
 | 
					            if node.Val < num {
 | 
				
			||||||
                // 目标结点在 root 的右子树中
 | 
					                // 目标结点在 cur 的右子树中
 | 
				
			||||||
                node = node.Right
 | 
					                node = node.Right
 | 
				
			||||||
            } else if node.Val > num {
 | 
					            } else if node.Val > num {
 | 
				
			||||||
                // 目标结点在 root 的左子树中
 | 
					                // 目标结点在 cur 的左子树中
 | 
				
			||||||
                node = node.Left
 | 
					                node = node.Left
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                // 找到目标结点,跳出循环
 | 
					                // 找到目标结点,跳出循环
 | 
				
			||||||
@ -127,9 +127,9 @@ comments: true
 | 
				
			|||||||
        let cur = root;
 | 
					        let cur = root;
 | 
				
			||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur !== null) {
 | 
					        while (cur !== null) {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur.val > num) cur = cur.left;
 | 
					            else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -148,9 +148,9 @@ comments: true
 | 
				
			|||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur !== null) {
 | 
					        while (cur !== null) {
 | 
				
			||||||
            if (cur.val < num) {
 | 
					            if (cur.val < num) {
 | 
				
			||||||
                cur = cur.right; // 目标结点在 root 的右子树中
 | 
					                cur = cur.right; // 目标结点在 cur 的右子树中
 | 
				
			||||||
            } else if (cur.val > num) {
 | 
					            } else if (cur.val > num) {
 | 
				
			||||||
                cur = cur.left; // 目标结点在 root 的左子树中
 | 
					                cur = cur.left; // 目标结点在 cur 的左子树中
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                break; // 找到目标结点,跳出循环
 | 
					                break; // 找到目标结点,跳出循环
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
@ -176,9 +176,9 @@ comments: true
 | 
				
			|||||||
        // 循环查找,越过叶结点后跳出
 | 
					        // 循环查找,越过叶结点后跳出
 | 
				
			||||||
        while (cur != null)
 | 
					        while (cur != null)
 | 
				
			||||||
        {
 | 
					        {
 | 
				
			||||||
            // 目标结点在 root 的右子树中
 | 
					            // 目标结点在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 目标结点在 root 的左子树中
 | 
					            // 目标结点在 cur 的左子树中
 | 
				
			||||||
            else if (cur.val > num) cur = cur.left;
 | 
					            else if (cur.val > num) cur = cur.left;
 | 
				
			||||||
            // 找到目标结点,跳出循环
 | 
					            // 找到目标结点,跳出循环
 | 
				
			||||||
            else break;
 | 
					            else break;
 | 
				
			||||||
@ -218,9 +218,9 @@ comments: true
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur.val == num) return null;
 | 
					            if (cur.val == num) return null;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur.left;
 | 
					            else cur = cur.left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
@ -244,9 +244,9 @@ comments: true
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur->val == num) return nullptr;
 | 
					            if (cur->val == num) return nullptr;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur->val < num) cur = cur->right;
 | 
					            if (cur->val < num) cur = cur->right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur->left;
 | 
					            else cur = cur->left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
@ -276,10 +276,11 @@ comments: true
 | 
				
			|||||||
            if cur.val == num:
 | 
					            if cur.val == num:
 | 
				
			||||||
                return None
 | 
					                return None
 | 
				
			||||||
            pre = cur
 | 
					            pre = cur
 | 
				
			||||||
 | 
					            # 插入位置在 cur 的右子树中
 | 
				
			||||||
            if cur.val < num:  # 插入位置在 root 的右子树中
 | 
					            if cur.val < num:
 | 
				
			||||||
                cur = cur.right
 | 
					                cur = cur.right
 | 
				
			||||||
            else:  # 插入位置在 root 的左子树中
 | 
					            # 插入位置在 cur 的左子树中
 | 
				
			||||||
 | 
					            else:
 | 
				
			||||||
                cur = cur.left
 | 
					                cur = cur.left
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        # 插入结点 val
 | 
					        # 插入结点 val
 | 
				
			||||||
@ -339,9 +340,9 @@ comments: true
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur.val === num) return null;
 | 
					            if (cur.val === num) return null;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur.left;
 | 
					            else cur = cur.left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
@ -370,9 +371,9 @@ comments: true
 | 
				
			|||||||
            }
 | 
					            }
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            if (cur.val < num) {
 | 
					            if (cur.val < num) {
 | 
				
			||||||
                cur = cur.right as TreeNode; // 插入位置在 root 的右子树中
 | 
					                cur = cur.right as TreeNode; // 插入位置在 cur 的右子树中
 | 
				
			||||||
            } else {
 | 
					            } else {
 | 
				
			||||||
                cur = cur.left as TreeNode; // 插入位置在 root 的左子树中
 | 
					                cur = cur.left as TreeNode; // 插入位置在 cur 的左子树中
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // 插入结点 val
 | 
					        // 插入结点 val
 | 
				
			||||||
@ -407,9 +408,9 @@ comments: true
 | 
				
			|||||||
            // 找到重复结点,直接返回
 | 
					            // 找到重复结点,直接返回
 | 
				
			||||||
            if (cur.val == num) return null;
 | 
					            if (cur.val == num) return null;
 | 
				
			||||||
            pre = cur;
 | 
					            pre = cur;
 | 
				
			||||||
            // 插入位置在 root 的右子树中
 | 
					            // 插入位置在 cur 的右子树中
 | 
				
			||||||
            if (cur.val < num) cur = cur.right;
 | 
					            if (cur.val < num) cur = cur.right;
 | 
				
			||||||
            // 插入位置在 root 的左子树中
 | 
					            // 插入位置在 cur 的左子树中
 | 
				
			||||||
            else cur = cur.left;
 | 
					            else cur = cur.left;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user