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

最近公共祖先 Lowest Common Ancestors

时间:2019-09-11 14:06:14      阅读:90      评论:0      收藏:0      [点我收藏+]

标签:一个   pre   二叉树   树根   解法   方法   入栈   传参   parent   

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

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

标签:一个   pre   二叉树   树根   解法   方法   入栈   传参   parent   

原文地址:https://www.cnblogs.com/yy-1046741080/p/11505547.html

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