Infiltrate a Binary Tree
Question
浸润整棵需要的时间是6 = 0 + 2 + 4
0
/ \
2 3
/
4
follow up1: 如果是k叉数 follow up2: 将每个node按照浸润的时间先后打印出来,上面例子应该是 0 -> 2 -> 3 -> 4
Solution
public int infiltrateATree(TreeNode root) {
if(root==null) return 0;
return Math.max(infiltrateATree(root.left),infiltrateATree(root.right))+root.val;
}
Follow up 1:
public int infiltrateAManyTree(ManyTreeNode root) {
if(root==null) return 0;
int max = 0;
for(ManyTreeNode mnode:root.childList) {
max = Math.max(max,infiltrateAKTree(mnode));
}
return max+root.val;
}
Follow up 2:
class ExtendedTreeNode {
TreeNode node;
int sum;
ExtendedTreeNode(TreeNode node, int val) {
this.node = node;
sum = val;
}
}
public List<TreeNode> infiltrateATree(TreeNode root) {
List<TreeNode> res = new ArrayList<>();
PriorityQueue<ExtendedTreeNode> pq = new PriorityQueue<>((a,b)->a.sum-b.sum);
pq.add(new ExtendedTreeNode(root,root.val));
while(!pq.isEmpty()) {
ExtendedTreeNode curNode = pq.poll();
res.add(curNode.node);
if(curNode.left!=null) pq.add(new ExtendedTreeNode(curNode.node.left,curNode.node.left.val+curNode.sum));
}
return res;
}
Last updated