代码随想录刷题营Day20(654:最大二叉树,601:合并二叉树,700:二叉搜索树中的搜索,98:验证二叉搜索树)

654:最大二叉树

这个题,明白思路了,跟上一个用中序和后序构造二叉树的思路一样,都是要划分数组。然后不断传入新的递归新的数组。就能很快做出来。但是,做题的时候出了一点小问题,导致node的根节点搞丢了,搞丢的原因就是,乐乐没有把每次递归的的几点进行返回。。。因此,没有把每次遍历的节点串起来构成一个树。所以,每次递归的返回值很重要!如果构造一棵树,那就要返回每次的node。
做构造二叉树的题,就是要前序遍历!每次递归的返回值把节点串起来!

class Solution:
    def constructMaximumBinaryTree(self,nums):
        def Traversal(tmp):
            if not tmp:
                return
            max_value=0
            max_value_index=0
            for i in range(len(tmp)):
                if tmp[i]>max_value:
                    max_value=tmp[i]
                    max_value_index=i
            node=TreeNode(max_value)
            if max_value_index>0:
                node.left=Traversal(tmp[0:max_value_index])
            if max_value_index<len(nums):
                node.right=Traversal(tmp[max_value_index+1:len(nums)])
            return node
        return Traversal(nums)

601:合并二叉树

这是在练习同时操作两棵二叉树的写法,同时传入两个二叉树的根节点,然后做同步遍历,这个题目用前序遍历更好的直观理解。终止条件,就是考虑四种情况:
(1)tree1为空:返回tree2
(2)tree2为空:返回tree1
(3)tree1和tree2都为空:返回none
(4)tree1和tree2都不为空,返回两个对应节点的加和。

class Solution:
    def mergeTrees(self,tree1,tree2):
        def Traversal(tree1,tree2):
            if not tree1:
                return tree2
            if not tree2:
                return tree1
            tree1.val=tree1.val+tree2.val
            tree1.left=Traversal(tree1.left,tree2.left)
            tree1.right=Traversal(tree1.right,tree2.right)
            return tree1
        result=Traversal(tree1,tree2)
        return result

700:二叉搜索树中的搜索

这个搜索的题还是比较可爱的,它不用搜索整个二叉树,而是找到结果之后,直接返回就行了,返回搜索到的节点。
一直有个问题,返回什么样的节点是返回整个构造好的二叉树,而返回什么是搜索到的节点呢。
关键在于,递归的接受值是什么,如果是
root.left=Traversal()
最后是return root,那就是返回的是整个构造好的整个二叉树
然而,如果是:
result=Traversal(),返回result,并没有result.left什么的,那就是返回的一个单个节点。

class Solution:
    def searchBST(self,root,val):
        def Traversal(root,val):
            if not root or root.val==val:
                return root
            if val<root.val:
                result=Traversal(root.left,val)
            if val>root.val:
                result=Traversal(root.right,val)
            return result
        result=Traversal(root,val)
        return result

98:验证二叉树

今天好累,过几天补上!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值