simple dfs problem, if we change the direction, we add 1 to path length, otherwise reset the path length.
of course, we need to know the last node is left or right to judge we have adjusted the direction or not.
The hardest thing of this question is to think about the initial state.
we will do twice dfs, one assume we start from left, one assum we start from right.
class Solution {
public:
//left = 1, right = 0;
int ans = 0;
void dfs(TreeNode *root, int last, int len){
ans = max(len, ans);
if(!root)return;
if(root->left){
if(!last)dfs(root->left, 1, len+1);
else dfs(root->left, 1, 1);
}
if(root->right){
if(last)dfs(root->right, 0, len+1);
else dfs(root->right, 0, 1);
}
}
int longestZigZag(TreeNode* root) {
dfs(root, 1, 0);
dfs(root, 0, 0);
return ans;
}
};