最近公共祖先 Lowest Common Ancestors

Posted yy-1046741080

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最近公共祖先 Lowest Common Ancestors相关的知识,希望对你有一定的参考价值。

在介绍官方解法之前,我先讲述一下我的方法:

struct node
    int data;
    int parent,left,right;  // 静态实现
;
  1. 在建立树的时候,通过传参,实现了parent的建立(指向父节点)
  2. 我们的目的是寻找i,j的公共结点;     如果parent=-1,那么说明为根结点。
  3. 找到i,j对应的结点,然后根据parent的值将根结点到i,j的路径存入栈中。此时得到两个栈。
  4. 比较栈首元素,最后一个相同的元素就是LCA。

 

这个方法的优点在于:没什么太多的限制,效率也还OK。


 

如果二叉树根据顺序存储,(一般下标对应编号),那么一下算法可以解决:

  1. 要找到i,j的LCA
  2. 如果i<j,说明要么i比j层低,要么i在j的左侧;因此j=j/2;
  3. 如果i>j,同理,i=i/2;
  4. 直到i=j,停止,此时i/j代表的就是LCA。

 


 

以上是关于最近公共祖先 Lowest Common Ancestors的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 235. 二叉搜索树的最近公共祖先(Lowest Common Ancestor of a Binary Search Tree) 32

[leetcode]236. Lowest Common Ancestor of a Binary Tree二叉树最近公共祖先

LeetCode 236.lowest-common-ancestor-of-a-binary-tr

LeetCode 236.lowest-common-ancestor-of-a-binary-tree

88 Lowest Common Ancestor of a Binary Tree

Leetcode 235 Lowest Common Ancestor of a Binary Search Tree 二叉树