代码随想录算法训练营第二十一天(二叉树篇)| 701. 二叉搜索树中地插入操作

学习资料:代码随想录 (programmercarl.com)

701. 二叉搜索树中的插入操作

题目链接: 701. 二叉搜索树中的插入操作 - 力扣(LeetCode)

思路:从二叉搜索树的叶子节点找到要插入节点的位置,加到此叶子节点的下面。此法非常高效,在遍历时,只需根据当前节点和插入值的大小比较,决定向左还是向右走,等到达最底部,就建一个节点,直接插入便可。

class Solution(object):
    def insertIntoBST(self, root, val):
        if root == None:
            node = TreeNode(val)
            return node
        # 上面代表找到要插入的叶子节点的位置,就新建一个node,把这个值返回回来,返回到上一层的
        # 左节点或者右节点,取决于下面的判断标准:
        if val < root.val:
            root.left = self.insertIntoBST(root.left, val)
            # 左边的root.left代表我们想把新的值赋给当前节点的左子树,右边
            # 的root.left意味着要继续从当前节点的右节点向下追踪
        if val > root.val:
            root.right = self.insertIntoBST(root.right, val)

        return root

        

在判断终止条件上,我最开始想的是当当前节点无子嗣时,就根据当前值和节点值的大小给当前值赋予一个新的左节点或者右节点,但这当中包含了下面递归的逻辑了,一切变得混乱了......其实,当到达原本二叉搜索树的叶子节点时,下面这个代码


root.left = self.insertIntoBST(root.left, val)

已经带我们来到了原来叶子节点的子嗣,是空的,那么就直接建立一个新node,return出来就好。

此题突然让我进一步领悟递归。递归的上半段是终止条件——”我们找到想要的节点/位置了,那么要干些什么(把值返回去,还是新建个node返回去?...)?“, 下半段则是确定我们寻找的线路/方向在哪里,等终止后,就再把值一步步地返回上去。

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值