Leetcode_#235_二叉搜索树的最近公共祖先

原题:#235_二叉搜索树的最近公共祖先

  • 思路
    • 如果当前节点的值均大于p,q节点的值,那么p,q节点的最近祖先一定在当前节点的左子树当中。反之则在右子树当中
    • 若大于其中一个值,小于另一个值,那么这个点就是p,q最近公共祖先
  • 递归
public TreeNode LCA(TreeNode root, TreeNode p, TreeNode q) {
    if (root.val > p.val && root.val > q.val) return LCA(root.left, p, q);
    if (root.val < p.val && root.val < q.val) return LCA(root.right, p, q);
    return root;
}

  • 迭代
class Solution {
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        int pVal = p.val;
        int qVal = q.val;
        TreeNode node = root;
        while (node != null) {
            int parentVal = node.val;
            if (pVal > parentVal && qVal > parentVal) {
                node = node.right;
            } else if (pVal < parentVal && qVal < parentVal) {
                node = node.left;
            } else {
                return node;
            }
        }
        return null;
    }
}

你可能感兴趣的:(数据结构与算法,二叉树,算法,leetcode,数据结构)