题目:
树中两个结点的最低公共祖先。
解决方法一:
假设是二叉搜索树(二叉搜索树是一个排序的二叉树,左子树的结点小于根结点,右子树的结点大于根结点),故找到一个结点,使其大于左子结点小于右子结点即可。
代码实现:
public static TreeNode getLastCommonNode(TreeNode pRoot, TreeNode pLeft, TreeNode pRight){
TreeNode treeNode = null;
if(pRoot == null || pLeft.val > pRight.val){
return null;
}
if(pRoot.val >= pRight.val){
treeNode = getLastCommonNode(pRoot.left, pLeft, pRight);
}
if(pRoot.val <= pLeft.val){
treeNode = getLastCommonNode(pRoot.right, pLeft, pRight);
}
if(pRoot.val >= pLeft.val && pRoot.val <= pRight.val){
return pRoot;
}
return treeNode;
}
解决方法二:
假设是普通的二叉树。递归遍历找到所给定的两个结点,然后向上标记,直到有一个结点的左子结点和右子结点都不为空返回即可。