diff --git a/problems/0701.二叉搜索树中的插入操作.md b/problems/0701.二叉搜索树中的插入操作.md index 0d3d676b..2dca140a 100644 --- a/problems/0701.二叉搜索树中的插入操作.md +++ b/problems/0701.二叉搜索树中的插入操作.md @@ -253,21 +253,38 @@ class Solution { } } ``` - +----- ## Python **递归法** - 有返回值 ```python +# Definition for a binary tree node. +# class TreeNode: +# def __init__(self, val=0, left=None, right=None): +# self.val = val +# self.left = left +# self.right = right class Solution: def insertIntoBST(self, root: TreeNode, val: int) -> TreeNode: - if root is None: - return TreeNode(val) # 如果当前节点为空,也就意味着val找到了合适的位置,此时创建节点直接返回。 + # 返回更新后的以当前root为根节点的新树,方便用于更新上一层的父子节点关系链 + + # Base Case + if not root: return TreeNode(val) + + # 单层递归逻辑: + if val < root.val: + # 将val插入至当前root的左子树中合适的位置 + # 并更新当前root的左子树为包含目标val的新左子树 + root.left = self.insertIntoBST(root.left, val) + if root.val < val: - root.right = self.insertIntoBST(root.right, val) # 递归创建右子树 - if root.val > val: - root.left = self.insertIntoBST(root.left, val) # 递归创建左子树 - return root + # 将val插入至当前root的右子树中合适的位置 + # 并更新当前root的右子树为包含目标val的新右子树 + root.right = self.insertIntoBST(root.right, val) + + # 返回更新后的以当前root为根节点的新树 + return roo ``` **递归法** - 无返回值 @@ -328,7 +345,7 @@ class Solution: return root ``` - +----- ## Go 递归法 @@ -374,7 +391,7 @@ func insertIntoBST(root *TreeNode, val int) *TreeNode { return root } ``` - +----- ## JavaScript 有返回值的递归写法