题意:给定一个树,返回具有最深节点的最小子树
思路:后跟遍历树
- 如果节点为null,返回null
- 获取左右子树的最大深度
- 如果左右子树相等,且深度大于等于当前的最大深度,那么更新结果
- 返回左右子树中的较大的深度
思想:后跟遍历
复杂度:时间O(n),空间O(n)
class Solution {
TreeNode res;
int maxLevel = 0;
public TreeNode subtreeWithAllDeepest(TreeNode root) {
if(root == null)
return root;
res = root;
get(root, 1);
return res;
}
int get(TreeNode root, int level) {
if(root == null)
return level;
int left = get(root.left, level + 1);
int right = get(root.right, level + 1);
if(left == right && left >= maxLevel) {
maxLevel = left;
res = root;
}
return Math.max(left, right);
}
}
网友评论