1129. 包含所有最深节点的最小子树

1129. 包含所有最深节点的最小子树

 

 

给定一个二叉树。
定义深度是树上的节点到根节点的距离,子树是一个节点和它所有后代节点的集合。
我们将树上的节点中具有最大深度的节点称为 关键节点
请编写一个程序返回包含所有 关键节点 的最小的子树。

样例

输入:
{2,3,5,4,1}
 
输出:
{3,4,1}

说明

样例中,这棵树如下图所示:
2
/ \
3 5
/ \
4 1

 

其中节点 4 和节点 1 是最深的节点。
那么包含这两个节点的最小子树就是 {3, 4, 1}

注意事项

 

二叉树的节点个数为 nn
1 \le n \le 10^3
1n1
0
3
 
 
 
 
/**
* Definition of TreeNode:
* public class TreeNode {
*     public int val;
*     public TreeNode left, right;
*     public TreeNode(int val) {
*         this.val = val;
*         this.left = this.right = null;
*     }
* }
*/
 
 
public class Solution {
    /**
     * @param root: a binary tree.
     * @return: return the minimun subtree contains all the key nodes.
     */
     public TreeNode subtreeWithAllKeyNodes(TreeNode root) {
        // write your code here.
        if (countNodes(root.left) > countNodes(root.right)) {
            return subtreeWithAllKeyNodes(root.left);
        } else if (countNodes(root.left) < countNodes(root.right)) {
            return subtreeWithAllKeyNodes(root.right);
        } else {
            return root;
        }
    }
 
 
    public int countNodes(TreeNode root) {
        // write your code here
        if (root == null) return 0;
        return 1 + Math.max(countNodes(root.left), countNodes(root.right));
    }
}
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时代我西

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值