Note:
This question is good summary for this kind of problem.
1) Once you get the root, loop through all the children. Get the max up/down/max from the children.
2) set root max = up + down + 1, then comparing with the max got from the children.
3) Return the max, current up and down.
/** * Definition for a multi tree node. * public class MultiTreeNode { * int val; * List<TreeNode> children; * MultiTreeNode(int x) { val = x; } * } */ public class Solution { /** * @param root the root of k-ary tree * @return the length of the longest consecutive sequence path */ private class ResultType { int max; int up; int down; public ResultType(int max, int up, int down) { this.max = max; this.up = up; this.down = down; } } public int longestConsecutive3(MultiTreeNode root) { // Write your code here return findLongestConsecutive(root).max; } private ResultType findLongestConsecutive(MultiTreeNode root) { if (root == null) { return new ResultType(0, 0, 0); } int up = 0, down = 0, max = 1; //at least max could be 1; //In the loop, we need to get the max up, down, max from root‘s child for (MultiTreeNode child : root.children) { ResultType childRst = findLongestConsecutive(child); if (child != null && child.val + 1 == root.val) { down = Math.max(down, childRst.down + 1); } if (child != null && child.val - 1 == root.val) { up = Math.max(up, childRst.up + 1); } max = Math.max(max, childRst.max); // } max = Math.max(up + down + 1, max); return new ResultType(max, up, down); } }
时间: 2024-10-15 19:24:10