*[?]Lowest Common Ancestor of Two Nodes in a Binary Tree

Reference:

http://blog.csdn.net/v_july_v/article/details/18312089  

http://leetcode.com/2011/07/lowest-common-ancestor-of-a-binary-tree-part-ii.html

http://www.cnblogs.com/springfor/p/4141924.html

(1) Is the tree a BST or not?

BST的话,我们就能按照BST的定义思考了。当前遍历的node如果比我们要找的两个点都大,说明那两个点都在当前node的左边,所以这两个node的祖先肯定在当前node的左边,所以往左边找。反之,往右边找。如果这两个点一个大于当前node一个小于当前node,说明当前node就是LCA。 如果这两个点一个是另一个的祖先,那么这个点就是LCA。

代码如下:

1 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
2         if(p.val < root.val && q.val < root.val)
3             return lowestCommonAncestor(root.left, p, q);
4         else if(p.val > root.val && q.val > root.val)
5             return lowestCommonAncestor(root.right, p, q);
6         else
7             return root;
8 }

(2)那如果不是BST呢?一般Binary Tree.

a. Tree结构中没有parent域。

递归找。

代码如下:

 1 //Worst case O(n)
 2 Node getLCA(Node root, Node node1, Node node2){
 3         if(root == null)
 4             return null
 5         if(root == node1 || root == node2)
 6             return root;
 7
 8         Node left = getLCA(root.left, node1, node2);
 9         Node right = getLCA(root.right, node1, node2);
10
11         if(left != null && right != null)
12             return root;
13         else if(left != null)
14             return left;
15         else if(right != null)
16             return right;
17         else
18             return null;
19     }

b. 如果有parent域。

转化为两个linkedlist的交点问题。

代码如下:

 1 int getHeight(Node p){
 2         int height = 0;
 3         while(p!=null){
 4             height++;
 5             p = p.parent;
 6         }
 7         return height;
 8     }
 9
10     void swap(int a, int b){
11         a = a + b;
12         b = a - b;
13         a = a - b;
14     }
15
16     Node getLCA(Node p, Node q){
17         int h1 = getHeight(p);
18         int h2 = getHeight(q);
19
20         //q is always deeper than p
21         if(h1 > h2){
22             swap(h1, h2);
23             swap(p, q);
24         }
25
26         int diff = h2 - h1;
27
28         for( int i = 0; i < diff; i++)
29             q = q.parent;
30
31         while(p!=null && q!=null){
32             //common node
33             if(p == q)
34                 return p;
35             p = p.parent;
36             q = q.parent;
37         }
38
39         return NULL; //p and q are not in the same tree
40     }
时间: 2024-10-05 13:46:48

*[?]Lowest Common Ancestor of Two Nodes in a Binary Tree的相关文章

4.7 Lowest Common Ancestor of a Binary Search Tree 二叉树的最小共同父节点

4.7 Design an algorithm and write code to find the first common ancestor of two nodes in a binary tree. Avoid storing additional nodes in a data structure. NOTE: This is not necessarily a binary search tree. LeetCode上的原题,请参见我之前的博客Lowest Common Ancest

235. Lowest Common Ancestor of a Binary Search Tree

1. 问题描述 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 th

Lowest Common Ancestor of a Binary Search Tree

1. Title 235. Lowest Common Ancestor of a Binary Search Tree 2. Http address https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-search-tree/ 3. The question Given a binary search tree (BST), find the lowest common ancestor (LCA) of two

Lowest Common Ancestor of a Binary Tree

题目连接 https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ Common Ancestor of a Binary Tree Description Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on

数据结构与算法(1)支线任务4——Lowest Common Ancestor of a Binary Tree

题目如下:https://leetcode.com/problems/lowest-common-ancestor-of-a-binary-tree/ Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. According to the definition of LCA on Wikipedia: “The lowest common ancestor is def

LeetCode (236):Lowest Common Ancestor of a Binary Search Tree

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

LeetCode OJ:Lowest Common Ancestor of a Binary Tree(最近公共祖先)

Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree. 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

leetcode - Lowest Common Ancestor of a Binary Search Tree

leetcode -  Lowest Common Ancestor of a Binary Search Tree 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

LeetCode235——Lowest Common Ancestor of a Binary Search Tree

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