Given a binary tree root
, a ZigZag path for a binary tree is defined as follow:
Zigzag length is defined as the number of nodes visited - 1. (A single node has a length of 0).
Return the longest ZigZag path contained in that tree.
Example 1:
Input: root = [1,null,1,1,1,null,null,1,1,null,1,null,null,null,1,null,1]
Output: 3
Explanation: Longest ZigZag path in blue nodes (right -> left -> right).
Example 2:
Input: root = [1,1,1,null,1,null,null,1,1,null,1]
Output: 4
Explanation: Longest ZigZag path in blue nodes (left -> right -> left -> right).
Example 3:
Input: root = [1]
Output: 0
Constraints:
50000
nodes..[1, 100]
.题目链接:https://leetcode.com/problems/longest-zigzag-path-in-a-binary-tree/
题目分析:每个点都可以作为当前根,dfs即可
5ms,时间击败93%
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public void helper(TreeNode cur, TreeNode fa, int step, int[] ans) {
if (cur == null) {
return;
}
if (ans[0] < step) {
ans[0] = step;
}
if (cur == fa.left) {
helper(cur.right, cur, step + 1, ans);
helper(cur.left, cur, 1, ans);
} else {
helper(cur.left, cur, step + 1, ans);
helper(cur.right, cur, 1, ans);
}
}
public int longestZigZag(TreeNode root) {
if (root == null) {
return 0;
}
int[] ans = new int[1];
helper(root.left, root, 1, ans);
helper(root.right, root, 1, ans);
return ans[0];
}
}