这题用递归很简单。递归找子树的最大深度,如果左子树和右子树的深度一样,即可认为当前节点为该子树 最深叶节点的公共祖先,我下面的代码中的 >= 是为了避免返回叶子。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
TreeNode res;
int depth = 0;
public TreeNode lcaDeepestLeaves(TreeNode root) {
getMaxDepth(root,0);
return res;
}
private int getMaxDepth(TreeNode t,int d)
{
if(t == null)
return d;
int df = getMaxDepth(t.left,d+1);
int dr = getMaxDepth(t.right,d+1);
if(df == dr && df >= depth)
{
depth = df;
res = t;
}
return df > dr ? df : dr;
}
}