1372. Longest ZigZag Path in a Binary Tree
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
tuple<int, int> myLongestZigZag(TreeNode* root, int& max_num) { // 后序遍历的方法,由下往上推
if(!root) return {-1, -1};
auto [ll, lr] = myLongestZigZag(root->left, max_num);
auto [rl, rr] = myLongestZigZag(root->right, max_num);
max_num = max({max_num, lr+1, rl+1});
return {lr+1, rl+1};
}
int longestZigZag(TreeNode* root) {
if(!root) return -1;
int max_num = 0;
myLongestZigZag(root, max_num);
return max_num;
}
};
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
int myMax(int a, int b) {
return a > b ? a : b;
}
int* myLongestZigZag(TreeNode* root, int& max_num) {
int *num = new int[2] ();
if(!root->left && !root->right) return num;
int *numL = new int[2], *numR = new int[2];
if(root->left) {
numL = myLongestZigZag(root->left, max_num);
max_num = myMax(max_num, numL[1]+1);
num[0] = numL[1]+1;
}
if(root->right) {
numR = myLongestZigZag(root->right, max_num);
max_num = myMax(max_num, numR[0]+1);
num[1] = numR[0]+1;
}
return num;
}
int longestZigZag(TreeNode* root) {
if(!root) return -1;
int max_num = 0;
myLongestZigZag(root, max_num);
return max_num;
}
};