# 1372. Longest ZigZag Path in a Binary Tree
###### tags: `Leetcode` `Bloomberg` `DFS`
## 思路
递归
对于每个node,分别求从它的left和right child zigzag走下去能走多远,过程中记录最长的
## Code
```java=
class Solution {
int maxLen = 0;
//dir == true left
//dir == false right
public int longestZigZag(TreeNode root) {
int leftLen = 0, rightLen = 0;
if(root.left!=null) leftLen = dfs(root.left, false)+1;
if(root.right!=null) rightLen = dfs(root.right, true)+1;
return Math.max(maxLen, Math.max(leftLen, rightLen));
}
public int dfs(TreeNode root, boolean dir){
int leftLen = 0, rightLen = 0;
if(dir){
if(root.left!=null) leftLen = dfs(root.left, !dir)+1;
if(root.right!=null) rightLen = dfs(root.right, dir)+1;
}
else{
if(root.right!=null) rightLen = dfs(root.right, !dir)+1;
if(root.left!=null) leftLen = dfs(root.left, dir)+1;
}
maxLen = Math.max(maxLen, Math.max(leftLen, rightLen));
return dir?leftLen:rightLen;
}
}
```