Chinaunix首页 | 论坛 | 博客
  • 博客访问: 345564
  • 博文数量: 135
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1106
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-20 09:56
文章分类

全部博文(135)

文章存档

2017年(3)

2016年(18)

2015年(69)

2014年(39)

2013年(6)

我的朋友

分类: C/C++

2015-11-17 00:49:02

算法思想:这道题的关键在于每个节点中包含指向父节点的指针,这使得程序可以用一个简单的算法实现。首先给出p的父节点p->parent,然后将 q的所有父节点依次和p->parent作比较,如果发现两个节点相等,则该节点就是最近公共祖先,直接将其返回。如果没找到相等节点,则将q的所 有父节点依次和p->parent->parent作比较......直到p->parent==root

Node *find_nearestancestor(Node *root, Node *p, Node *q)
{
    Node *temp;

    while (p != NULL)
    {
        p = p->parent;
        temp = q;

        while (temp != NULL)
        {
            if (p == temp->parent)
                return p;

            temp = temp->parent;
        }
    }
}


阅读(457) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~