leetcode 235: Lowest Common Ancestor of a Binary Search Tree,leetcodeancestor

來源:互聯網
上載者:User

leetcode 235: Lowest Common Ancestor of a Binary Search Tree,leetcodeancestor
Lowest Common Ancestor of a Binary Search TreeTotal Accepted: 203 Total Submissions: 511

Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.

According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes v and w as the lowest node in T that has both v and w as descendants (where we allowa node to be a descendant of itself).”

        _______6______       /              \    ___2__          ___8__   /      \        /      \   0      _4       7       9         /  \         3   5

For example, the lowest common ancestor (LCA) of nodes 2 and 8 is 6. Another example is LCA of nodes 2 and 4 is 2, since a node can be a descendant of itself according to the LCA definition.

[思路]

如果如果p,q 比root小, 則LCA必定在左子樹, 如果p,q比root大, 則LCA必定在右子樹. 如果一大一小, 則root即為LCA.

[CODE]

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    //2, 1    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(root==null || p==null || q==null) return null;                if(Math.max(p.val, q.val) < root.val) {            return lowestCommonAncestor(root.left, p, q);        } else if(Math.min(p.val, q.val) > root.val) {            return lowestCommonAncestor(root.right, p, q);        } else return root;    }}

這道題還可以有一個followup. 如果是普通二叉樹, 而不是BST.  則應該遍曆節點, 先找到p,q. 同時記錄下從root到該幾點的路徑.   之後比較路徑,最後一個相同的節點便是LCA.

[CODE]

/** * Definition for a binary tree node. * public class TreeNode { *     int val; *     TreeNode left; *     TreeNode right; *     TreeNode(int x) { val = x; } * } */public class Solution {    //2, 1    public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {        if(root==null || p==null || q==null) return null;                List<TreeNode> pathp = new ArrayList<>();        List<TreeNode> pathq = new ArrayList<>();        pathp.add(root);        pathq.add(root);                getPath(root, p, pathp);        getPath(root, q, pathq);                TreeNode lca = null;        for(int i=0; i<pathp.size() && i<pathq.size(); i++) {            if(pathp.get(i) == pathq.get(i)) lca = pathp.get(i);            else break;        }        return lca;    }        private boolean getPath(TreeNode root, TreeNode n, List<TreeNode> path) {        if(root==n) {            return true;        }                if(root.left!=null) {            path.add(root.left);            if(getPath(root.left, n, path)) return true;            path.remove(path.size()-1);        }                if(root.right!=null) {            path.add(root.right);            if(getPath(root.right, n, path)) return true;            path.remove(path.size()-1);        }                return false;    }}


著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.