/**
Binary Tree Longest Consecutive Sequence
Given a binary tree, find the length of the longest consecutive sequence path.
The path refers to any sequence of nodes from some starting node to any node in the tree
along the parent-child connections. The longest consecutive path need to be
from parent to child (cannot be the reverse).
For example,
1
\
3
/ \
2 4
\
5
Longest consecutive sequence path is 3-4-5, so return 3.
2
\
3
/
2
/
1
Longest consecutive sequence path is 2-3,not3-2-1, so return 2.
*/
public class BinaryTreeLongestConsecutiveSequence{
public int longestConsecutive(TreeNode root) {
int result = dfs(root, -1, 0);
return result;
}
int dfs(TreeNode root, int last, int max){
if(root == null){
return max;
}
if(root.val!=last+1){
max = 1;
}else{
max++;
}
//recursively do the dfs on the child nodes
int leftmax = dfs(root.left, root.val, max);
int rightmax = dfs(root.right, root.val, max);
max = Math.max(max, Math.max(rightmax, leftmax));
return max;
}
}
Binary Tree Longest Consecutive Sequence
Given a binary tree, find the length of the longest consecutive sequence path.
The path refers to any sequence of nodes from some starting node to any node in the tree
along the parent-child connections. The longest consecutive path need to be
from parent to child (cannot be the reverse).
For example,
1
\
3
/ \
2 4
\
5
Longest consecutive sequence path is 3-4-5, so return 3.
2
\
3
/
2
/
1
Longest consecutive sequence path is 2-3,not3-2-1, so return 2.
*/
public class BinaryTreeLongestConsecutiveSequence{
public int longestConsecutive(TreeNode root) {
int result = dfs(root, -1, 0);
return result;
}
int dfs(TreeNode root, int last, int max){
if(root == null){
return max;
}
if(root.val!=last+1){
max = 1;
}else{
max++;
}
//recursively do the dfs on the child nodes
int leftmax = dfs(root.left, root.val, max);
int rightmax = dfs(root.right, root.val, max);
max = Math.max(max, Math.max(rightmax, leftmax));
return max;
}
}
No comments:
Post a Comment