549.|549. Binary Tree Longest Consecutive Sequence II
Given a binary tree, you need to find the length of Longest Consecutive Path in Binary Tree.
Especially, this path can be either increasing or decreasing. For example, [1,2,3,4] and [4,3,2,1] are both considered valid, but the path [1,2,4,3] is not valid. On the other hand, the path can be in the child-Parent-child order, where not necessarily be parent-child order.
Example 1:
Input:
1
/ \
23
Output: 2
Explanation: The longest consecutive path is [1, 2] or [2, 1].
Example 2:
Input:
2
/ \
13
Output: 3
Explanation: The longest consecutive path is [1, 2, 3] or [3, 2, 1].
Note: All the values of tree nodes are in the range of [-1e7, 1e7].因为本题目可以是 child-Parent-child ,所以用"Post-order 分治 上传"而不是preorder
Solution:Post-order 分治 上传 思路:
Time Complexity: O(N) Space Complexity: O(N) 递归
【549.|549. Binary Tree Longest Consecutive Sequence II】Solution Code:
/**
* Definition for a binary tree node.
* public class TreeNode {
*int val;
*TreeNode left;
*TreeNode right;
*TreeNode(int x) { val = x;
}
* }
*/
public class Solution {
int max = 0;
class Result {
TreeNode node;
int inc;
int des;
}public int longestConsecutive(TreeNode root) {
traverse(root);
return max;
}private Result traverse(TreeNode node) {
if (node == null) return null;
Result left = traverse(node.left);
Result right = traverse(node.right);
Result curr = new Result();
curr.node = node;
curr.inc = 1;
curr.des = 1;
if (left != null) {
if (node.val - left.node.val == 1) {
curr.inc = Math.max(curr.inc, left.inc + 1);
}
else if (node.val - left.node.val == -1) {
curr.des = Math.max(curr.des, left.des + 1);
}
}if (right != null) {
if (node.val - right.node.val == 1) {
curr.inc = Math.max(curr.inc, right.inc + 1);
}
else if (node.val - right.node.val == -1) {
curr.des = Math.max(curr.des, right.des + 1);
}
}max = Math.max(max, curr.inc + curr.des - 1);
return curr;
}
}
推荐阅读
- 怀念三里屯那家叫做the|怀念三里屯那家叫做the tree 的酒吧
- ztree|ztree 拖拽
- SourceTree|SourceTree 教程文档(了解界面)
- cs61b week8 -- Binary Search Tree
- webpack总结
- Codeforces|Codeforces Round #263 Div.1 B Appleman and Tree --树形DP【转】
- C++|C++ pbds 库平衡树(tree)
- 机器学习 — Decision Tree
- leetCode解题报告|leetCode解题报告之Binary Tree Level Order Traversal II,I(二叉树层次遍历)
- bootstrap|bootstrap treeview.js 权限加载时,复选框被选中的 demo