代码:
直接深度优先超时 用map存储遍历过的左右的最长长度
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
Map<TreeNode,Integer> l = new HashMap<>();
Map<TreeNode,Integer> r = new HashMap<>();
public int longestZigZag(TreeNode root) {
if(root==null) return 0;
int cnt = Math.max(getLen(root,0),getLen(root,1));
cnt = Math.max(cnt,longestZigZag(root.left));
cnt = Math.max(cnt,longestZigZag(root.right));
return cnt;
}
public int getLen(TreeNode node,int dir){
if(node==null)return -1;
else if(dir==0){
if(!r.containsKey(node.left)){
r.put(node.left,getLen(node.left,1));
}
return r.get(node.left)+1;
}else if(dir==1){
if(!l.containsKey(node.right)){
l.put(node.right,getLen(node.right,0));
}
return l.get(node.right)+1;
}else return Integer.MIN_VALUE;
}
}