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
1≤n≤1
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));
}
}