class Solution:
def pathSum(self, root: TreeNode) -> List[List[int]]:
path = []
paths = []
def dfs(root):
if root is None:
return None
else:
path.append(root.val)
if root.left is None and root.right is None:
paths.append(path[:])
dfs(root.left)
dfs(root.right)
path.pop()
dfs(root)
return paths
Q:为什么两次回溯只需要一次pop()呢
A:把当前的结点(叫他N1吧)加入数组中,然后去遍历他的左孩子,左孩子的所有孩子结点都遍历完之后,又回到了N1,如果你这时候pop了,相当于把N1这个结点去掉了,而你这个时候还没有递归调用N1的右孩子结点,当你递归N1的右节点,数组里N1的值就已经被你pop了,就这出现问题了呀。只有当递归调用完N1的左右孩子才能pop当前这个N1的结点,这就是为什么只需要一次删除,况且你一个N1节点只加入了一次,当然是pop一次了。
猜你喜欢:👇🏻
⭐【编程】二叉树的先序、中序、后序遍历
⭐【Leetcode】Python 代码本地构造二叉树、链表
⭐【Leetcode】组合、排列、子集、切割(回溯模板和去重方法)