地里新农-请到考试中心学习规则
- 积分
- 4
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2016-1-27
- 最后登录
- 1970-1-1
|
我也写了一写,dfs with hash map
public TreeNode minSubtreeDeepestLeaf(TreeNode root) {
// record the deepest depth under each node in a map
// for a parent, if left and right subtree have the same
// deepest depth, return the parent node itself,
// otherwise, return the subtree with deepest child
if (root == null) {
return root;
}
Map<TreeNode, Integer> map = new HashMap<>();
return helper(root, map, 1);
}
private TreeNode helper(TreeNode root, Map<TreeNode, Integer> map, int depth) {
if (root.left == null && root.right == null) {
map.put(root, depth);
return root;
}
if (root.left == null) {
return helper(root.right, map, depth + 1);
}
if (root.right == null) {
return helper(root.left, map, depth + 1);
}
TreeNode leftResult = helper(root.left, map, depth + 1);
TreeNode rightResult = helper(root.right, map, depth + 1);
if (map.get(leftResult) == map.get(rightResult)) {
map.put(root, map.get(leftResult));
return root;
}
return map.get(leftResult) > map.get(rightResult) ? leftResult : rightResult;
} |
|