34. 二叉树中和为某一值的路径
思路:采用深度优先搜索的方式,枚举每一条从根节点到叶子节点的路径。当我们遍历到叶子节点,且此时路径和恰为目标和时,我们就找到了一条满足条件的路径。
注意:在为叶子节点的前提下不断判断当前target是否等于路径和
代码:
class Solution:
def pathSum(self, root: TreeNode, target: int) -> List[List[int]]:
ret = []
path = []
def dfs(root,target):
if not root:
return
path.append(root.val)
target = target-root.val
if not root.right and not root.left and target==0:
ret.append(path[:])
dfs(root.left,target)
dfs(root.right,target)
path.pop()
dfs(root,target)
return ret
1372. 二叉树中的最长交错路径
思路:记录当前结点是左/右孩子,即记录当前路径的方向.搜索其孩子时,根据上一条路径方向判断。如果当前路径方向相反,路径长度+1,如果相同,路径长度置为1
注意:max函数更新最大值
代码:
class Solution:
def longestZigZag(self, root: TreeNode) -> int:
def dfs(root,length,direction):
if not root:
return
nonlocal res
res = max(res,length)
if direction == 1:
dfs(root.right,length+1,direction*-1)
dfs(root.left,1,1)
else:
dfs(root.left,length+1,direction*-1)
dfs(root.right,1,-1)
res = 0
dfs(root,0,1)
dfs(root,0,-1)
return res
94. 二叉树的中序遍历
思路:中序遍历,那就按照 左-打印-右这种顺序遍历树就可以了,递归函数实现;终止条件:当前节点为空时;函数内:递归的调用左节点,打印当前节点,再递归调用右节点
注意:数组记录打印值
代码:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
ans=[]
def dfs(root,ans):
if not root:
return ans
dfs(root.left,ans)
ans.append(root.val)
dfs(root.right,ans)
dfs(root,ans)
return ans