Given a tree, find the smallest subtree that contains all of the tree's deepest nodes

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Given a tree, find the smallest subtree that contains all of the tree's deepest nodes相关的知识,希望对你有一定的参考价值。

Given a tree, find the smallest subtree that contains all of the trees deepest nodes.. from: 1point3acres.com/bbs 
                  a
               /  |  \.
             b   c   d/   \       |
         e      f      g
       /       /  \. 
      h      i     j
depth of tree: 4
deepest nodes:[h,i,j]
least common ancestor of [h,i,j]: b.
return: b

我问面试官这个树的定义呢,我要不要写一写,面试官说不用了,你就随意写吧,我可以【猜】啊!
我就找到leetcode上面哪个lowest common ancestor of binary tree,一通瞎改了改改成了多叉树版本的,这时候我是直接使用了 h,i,j 这几个节点假设是输入的。

 

 

import java.util.ArrayList;

class TreeNode{
    int val;
    ArrayList<TreeNode> children;
    public TreeNode(int val){
        this.val = val;
        children = new ArrayList<>();
    }
}
class Result{
    TreeNode node;
    int maxDepth;
    public Result(TreeNode node, int maxDepth){
        this.node = node;
        this.maxDepth = maxDepth;
    }
}
public class Solution{
    public static TreeNode find(TreeNode root){
        if(root == null || root.children.isEmpty()) return root;
        return helper(root).node;
    }
    public static Result helper(TreeNode root){
        if(root.children.isEmpty()) return new Result(root, 1);
        int size = root.children.size();
        int maxDepth = Integer.MIN_VALUE;
        Result r = new Result(root, maxDepth);
        for(int i = 0; i < size; i++){
            Result tmp = helper(root.children.get(i));
            if(tmp.maxDepth > maxDepth){
                maxDepth = tmp.maxDepth;
                r.node = tmp.node;
                r.maxDepth = tmp.maxDepth + 1;
            }
            else if(tmp.maxDepth == maxDepth){
                r.node = root;
            }
        }
        return r;
    }
    public static void main(String[] args){
        TreeNode n1 = new TreeNode(1);
        TreeNode n2 = new TreeNode(2);
        TreeNode n3 = new TreeNode(3);
        TreeNode n4 = new TreeNode(4);
        TreeNode n5 = new TreeNode(5);
        TreeNode n6 = new TreeNode(6);
        TreeNode n7 = new TreeNode(7);
        TreeNode n8 = new TreeNode(8);
        TreeNode n9 = new TreeNode(9);
        TreeNode n10 = new TreeNode(10);
        n1.children.add(n2);
        n1.children.add(n3);
        n1.children.add(n4);
        n2.children.add(n5);
        n2.children.add(n6);
        n4.children.add(n7);
        n5.children.add(n8);
        n5.children.add(n9);
        n6.children.add(n10);
        TreeNode res = find(n1);
        System.out.println(res.val);

    }
}

  

以上是关于Given a tree, find the smallest subtree that contains all of the tree's deepest nodes的主要内容,如果未能解决你的问题,请参考以下文章

python: find the index of a given value in a list

Given a family tree, find out if two people are blood related

leetcode1283. Find the Smallest Divisor Given a Threshold

1. PermMissingElem Find the missing element in a given permutation.

Given a string, find the length of the longest substring without repeating characters.(给定一个字符串,找到最长的

leetcode 1283. Find the Smallest Divisor Given a Threshold