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:验证二叉树
今天好累,过几天补上!