文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、leetcode 513.找树左下角的值
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 层序遍历
s = deque()
if root == None:
return 0
s.append(root)
size = 1
while s:
store = []
while size:
cur = s.popleft()
store.append(cur.val)
print(cur.val)
if cur.left:
s.append(cur.left)
if cur.right:
s.append(cur.right)
size -= 1
size = len(s)
# print(store)
return store[0]
二、leetcode 112. 路径总和
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 递归
访问每一条根到子叶的路径,求和,判断
注意:traversal中的path是list的地址
def traversal(root, path, res):
path.append(root.val)
if root.left == None and root.right == None:
s = sum(path)
if s == targetSum:
res = 1
return res
return res
if root.left:
res += traversal(root.left, path, res)
path.pop()
if root.right:
res += traversal(root.right, path, res)
path.pop()
return res
if root == None:
return False
path = []
res = 0
res = traversal(root, path, res)
if res != 0:
return True
else:
return False
三、leetcode 113.路径总和ii
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 递归
def traversal(root, path, res):
path.append(root.val)
if root.left == None and root.right == None:
s = sum(path)
if s == targetSum:
p = []
for i in range(len(path)):
p.append(path[i])
res.append(p)
# print(f"res = {res}")
return
if root.left:
traversal(root.left, path, res)
path.pop()
if root.right:
traversal(root.right, path, res)
path.pop()
if root == None:
return []
path = []
res = []
traversal(root, path, res)
return res
四、leetcode 106.从中序与后序遍历序列构造二叉树§§§
1.题目链接:
2.独立做题问题总结
3.解法总结:
- 递归
中序遍历:左中右
后序遍历:左右中
a. 通过后序数组最后一位,找到根节点。
b. 从中序数组中找到根节点对应的index
c. 将中序数组切割成左中序,右中序
d. 根据左中序,切割后序为左后序,右后序
e. 递归处理左区间和右区间
f. 返回root
§先切中序数组,后切后序数组
§打日志(print
def buildTree(self, inorder: List[int], postorder: List[int]) -> Optional[TreeNode]:
if len(postorder) == 0:
return None
mid = postorder[-1]
root = TreeNode(mid)
if len(postorder) == 1:
return root
# for i in range(len(inorder)):
# if inorder[i] == mid:
# break. #慢
inorderindex = inorder.index(mid)
inorderl = inorder[0:inorderindex]
inorderr = inorder[inorderindex + 1: len(inorder)]
postorderl = postorder[0:inorderindex]
postorderr = postorder[inorderindex: len(postorder) - 1]
root.left = self.buildTree(inorderl, postorderl)
root.right = self.buildTree(inorderr, postorderr)
return root
五、leetcode 105.从前序与中序遍历序列构造二叉树
1.题目链接:
2.独立做题问题总结
3.解法总结:
if len(inorder) == 0:
return None
mid = preorder[0]
root = TreeNode(mid)
if len(preorder) == 1:
return root
inorderindex = inorder.index(mid)
inorderl = inorder[0:inorderindex]
inorderr = inorder[inorderindex + 1: ]
preorderl = preorder[1:inorderindex + 1]
preorderr = preorder[inorderindex + 1:]
root.left = self.buildTree(preorderl,inorderl)
root.right = self.buildTree(preorderr, inorderr)
return root