核心在于左右子树都存在所需点的话,那么祖先就是root。否则返回一边。
题目
一次后序遍历,计算深度的同时,将解答也返回,如果两子树深度相同,说明每颗子树都存在最深节点,此时返回root,否则返回子树深度大的,一路传上来的
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode lcaDeepestLeaves(TreeNode root) {
return postOrder(root).node;
}
public Ans postOrder(TreeNode root){
if(root == null){
return new Ans(0, null);
}
Ans left = postOrder(root.left);
Ans right = postOrder(root.right);
if(left.depth == right.depth){
return new Ans(left.depth + 1, root);
}else if(left.depth > right.depth){
return new Ans(left.depth + 1, left.node);
}else{
return new Ans(right.depth + 1, right.node);
}
}
}
class Ans{
int depth;
TreeNode node;
Ans(int depth, TreeNode node){
this.depth = depth;
this.node = node;
}
}