1372. 二叉树中的最长交错路径 - 力扣(LeetCode)
思路:
考虑递归
引入辅助函数 dfs,该函数保存当前长度 length 和 是否为左节点的 isLeft,逻辑为:
1.如果是左节点,在向下递归时,右节点 length+1,isLeft 为 false;左节点长度初始化为1
2.如果是右节点,在向下递归时,左节点 length+1,isLeft 为 false;右节点长度初始化为1
3.遇到空节点时递归终止
递归时遇到更长的长度,更新 max
class Solution {
int max=0;
public int longestZigZag(TreeNode root) {
if(root==null)return 0;
dfs(root,0,false);
dfs(root,0,true);
return max;
}
public void dfs(TreeNode root,int length,boolean isLeft){
if(root==null){
return;
}
if(isLeft){
dfs(root.right,length+1,false);
dfs(root.left,1,true);
}else{
dfs(root.left,length+1,true);
dfs(root.right,1,false);
}
if(max<length){
max=length;
}
}
}