文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、leetcode 654. 最大二叉树
1.题目链接:
2.独立做题问题总结
一开始做的时候用的。
3.解法总结:
if len(nums) == 0:
return None
if len(nums) == 1:
root = TreeNode(nums[0])
return root
rootval = max(nums)
rootindex = nums.index(rootval)
root = TreeNode(rootval)
numsl = nums[0:rootindex]
numsr = nums[rootindex + 1:]
root.left = self.constructMaximumBinaryTree(numsl)
root.right = self.constructMaximumBinaryTree(numsr)
return root
二、leetcode 617. 合并二叉树
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 递归
注意前三个判断条件返回的是原root1或root2,而不是新建一个treenode!
if root1 == None and root2 != None:
return root2
elif root1 != None and root2 == None:
return root1
elif root1 == None and root2 == None:
return None
else:
root = TreeNode(root1.val + root2.val)
root.left = self.mergeTrees(root1.left, root2.left)
root.right = self.mergeTrees(root1.right, root2.right)
return root
- 迭代(代码随想录
class Solution:
def mergeTrees(self, root1: TreeNode, root2: TreeNode) -> TreeNode:
if not root1:
return root2
if not root2:
return root1
queue = deque()
queue.append(root1)
queue.append(root2)
while queue:
node1 = queue.popleft()
node2 = queue.popleft()
# 更新queue
# 只有两个节点都有左节点时, 再往queue里面放.
if node1.left and node2.left:
queue.append(node1.left)
queue.append(node2.left)
# 只有两个节点都有右节点时, 再往queue里面放.
if node1.right and node2.right:
queue.append(node1.right)
queue.append(node2.right)
# 更新当前节点. 同时改变当前节点的左右孩子.
node1.val += node2.val
if not node1.left and node2.left:
node1.left = node2.left
if not node1.right and node2.right:
node1.right = node2.right
return root1
三、leetcode 700. 二叉搜索树中的搜索
二叉搜索树利用中序遍历!
1.题目链接:
2.独立做题问题总结
3.解法总结:
if root == None:
return None
if val == root.val:
return root
if val > root.val:
root = self.searchBST(root.right,val)
elif val < root.val:
root = self.searchBST(root.left, val)
return root
- 迭代
class Solution:
def searchBST(self, root: TreeNode, val: int) -> TreeNode:
while root is not None:
if val < root.val: root = root.left
elif val > root.val: root = root.right
else: return root
return None
四、leetcode 98. 验证二叉搜索树§§§
1.题目链接:
2.独立做题问题总结
3.解法总结:
利用中序遍历,将元素存入数组,判断是否递增
def helper(root, res):
if root == None:
return res
res = helper(root.left, res)
res.append(root.val)
res = helper(root.right, res)
return res
res = []
if root == None:
return True
res = helper(root, res)
if len(res) == 1:
return True
cur1 = res.pop(0)
while res:
cur2 = res.pop(0)
if cur2 <= cur1:
return False
cur1 = cur2
return True
- 递归1
nonlocal cur_max
def helper(root, l = -float(inf), r = float(inf)):
if root == None:
return True
if l < root.val < r:
return helper(root.left, l, root.val) and helper(root.right, root.val, r)
return False
return helper(root)
- 递归2
def helper(root):
nonlocal maxval
if root == None:
return True
l = helper(root.left)
if root.val > maxval:
maxval = root.val
else:
return False
r = helper(root.right)
return l and r
maxval = -float(inf)
return helper(root)