码迷,mamicode.com
首页 > 其他好文 > 详细

Lowest Common Ancestor of a Binary Tree Part I

时间:2014-10-12 06:40:37      阅读:160      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   color   ar   sp   div   art   on   

4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Return #nodes that matches P or Q in the subtree.
int countMatchesPQ(Node *root, Node *p, Node *q) {
  if (!root) return 0;
  int matches = countMatchesPQ(root->left, p, q) + countMatchesPQ(root->right, p, q);
  if (root == p || root == q)
    return 1 + matches;
  else
    return matches;
}
 
Node *LCA(Node *root, Node *p, Node *q) {
  if (!root || !p || !q) return NULL;
  if (root == p || root == q) return root;
  int totalMatches = countMatchesPQ(root->left, p, q);
  if (totalMatches == 1)
    return root;
  else if (totalMatches == 2)
    return LCA(root->left, p, q);
  else /* totalMatches == 0 */
    return LCA(root->right, p, q);
}

 

 

 

bottom to up.  后序遍历

 

Node *LCA(Node *root, Node *p, Node *q) {
  if (!root) return NULL;
  if (root == p || root == q) return root;
  Node *L = LCA(root->left, p, q);
  Node *R = LCA(root->right, p, q);
  if (L && R) return root;  // if p and q are on both sides
  return L ? L : R;  // either one of p,q is on one side OR p,q is not in L&R subtrees
}

 

Lowest Common Ancestor of a Binary Tree Part I

标签:des   style   blog   color   ar   sp   div   art   on   

原文地址:http://www.cnblogs.com/leetcode/p/4020091.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!