# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def longestZigZag(self, root: Optional[TreeNode]) -> int:
self.maxlen = 0
def dfs(node, direction, length):
if not node:
return
self.maxlen = max(self.maxlen, length)
if direction == 'left':
dfs(node.left, 'right', length + 1)
dfs(node.right, 'left', 1)
else:
dfs(node.right, 'left', length + 1)
dfs(node.left, 'right', 1)
dfs(root.left, 'right', 1)
dfs(root.right, 'left', 1)
return self.maxlen
// Definition for a binary tree node.
// struct TreeNode {
// int val;
// TreeNode *left;
// TreeNode *right;
// TreeNode() : val(0), left(nullptr), right(nullptr) {}
// TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
// TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
// };
class Solution {
public:
int maxlen = 0;
void dfs(TreeNode* node, bool isLeft, int length) {
if (!node) return;
maxlen = std::max(maxlen, length);
if (isLeft) {
dfs(node->left, false, length + 1);
dfs(node->right, true, 1);
} else {
dfs(node->right, true, length + 1);
dfs(node->left, false, 1);
}
}
int longestZigZag(TreeNode* root) {
dfs(root->left, false, 1);
dfs(root->right, true, 1);
return maxlen;
}
};
// 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 {
private int maxlen = 0;
public int longestZigZag(TreeNode root) {
dfs(root.left, false, 1);
dfs(root.right, true, 1);
return maxlen;
}
private void dfs(TreeNode node, boolean isLeft, int length) {
if (node == null) return;
maxlen = Math.max(maxlen, length);
if (isLeft) {
dfs(node.left, false, length + 1);
dfs(node.right, true, 1);
} else {
dfs(node.right, true, length + 1);
dfs(node.left, false, 1);
}
}
}
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var longestZigZag = function(root) {
let maxlen = 0;
function dfs(node, isLeft, length) {
if (!node) return;
maxlen = Math.max(maxlen, length);
if (isLeft) {
dfs(node.left, false, length + 1);
dfs(node.right, true, 1);
} else {
dfs(node.right, true, length + 1);
dfs(node.left, false, 1);
}
}
dfs(root.left, false, 1);
dfs(root.right, true, 1);
return maxlen;
};
root
node of a binary tree. The output should be a single integer representing the length of the longest ZigZag path found in the tree.
Consider the following binary tree:
1 / \ 2 3 \ \ 4 5 / \ 6 7
As the DFS traverses, it checks all such paths, updating the maximum length each time a longer ZigZag is found.