235. 二叉搜索樹的最近公共祖先(樹)(BST)

在這裏插入圖片描述
題目給出了,兩個節點在書中的指針,利用指針對應的數據及BST的性質處理;

要利用 BST的性質:
節點 NN 左子樹上的所有節點的值都小於等於節點 NN 的值
節點 NN 右子樹上的所有節點的值都大於等於節點 NN 的值
左子樹和右子樹也都是 BST

在這裏插入圖片描述

在這裏插入圖片描述

算法:
從根節點開始遍歷樹
如果節點 pp 和節點 qq 都在右子樹上,那麼以右孩子爲根節點繼續 1 的操作
如果節點 pp 和節點 qq 都在左子樹上,那麼以左孩子爲根節點繼續 1 的操作
如果條件 2 和條件 3 都不成立,這就意味着我們已經找到節 pp 和節點 qq 的 LCA 了

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        int pval = p.val;
        int qval = q.val;
        int curVal = root.val;
        if(pval >curVal && qval >curVal) return lowestCommonAncestor(root.right,p,q);
        if(pval <curVal && qval <curVal) return lowestCommonAncestor(root.left,p,q);
        return root;
    }
}

方法二:迭代

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    
    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
        int pval = p.val;
        int qval = q.val;
        TreeNode cur = root;
        while(cur!=null){
        int curVal = cur.val;
        if(pval >curVal && qval >curVal) cur = cur.right;
        if(pval <curVal && qval <curVal) cur = cur.left;
        return  cur;
        }
        return  null;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章