题目:p、q分别为指向该二叉树中任意两个节点的指针,试编写算法ancestor(root,p,q,r),找到p、q的最近公共祖先节点r
分析:
        上一道题其实可以给我们一些启示,就是我们可以将任意节点的祖先存起来,那这里我们也可以用两个栈,分别将p、q
        的祖先存在栈中,因为栈顶是最近的祖先节点,所以我们可以一次往下寻找相同节点,第一次找到的相同节点便是最近公共
        祖先节点。

代码如下:

struct biTree {char data;struct biTree *lchild;struct biTree *rchild;
};
struct Stack {biTree *arr;int len;int top;
};
#include <stdio.h>
#include <stdlib.h>
void findAncestor(Stack *s, biTree *m, biTree *x) {//这里将寻找祖先节点的方法封装起来struct biTree *r = (struct biTree *)malloc(sizeof(struct biTree));bool empty(Stack *);bool pushS(Stack *, biTree*);bool pop(Stack *);biTree *top(Stack *);//返回得是一个指针while (m || !empty(s)) {if (m) {//一路将所有左孩子入栈pushS(s, m);m = m->lchild;}else {//没有左孩子,m = top(s);if (m->rchild && m != r) {//将右子树的所有左孩子入栈r = m;m = m->rch

二叉链表之寻找两节点的最近公共祖先☆相关推荐

  1. 两节点的最小公共祖先LCA

    一.二叉搜索树中两节点的最小公共祖先: 最初级的题目,在一颗二叉搜索树中寻找两节点的最小公共祖先.根据二叉搜索树的特征,从根节点开始查找,若两节点的val值都小于当前节点,则他们的最小公共祖先就去左子 ...

  2. 3003 基于二叉链表的二叉树左右节点的交换 附思路

    孩子为什么是敏感词.. 描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写递归算法交换该二叉树的左右孩子. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为' ...

  3. 数据结构-寻找二叉树两节点的最近公共祖先(Java)

    寻找最近公共祖先 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先. 百度百科中最近公共祖先的定义为:"对于有根树 T 的两个节点 p.q,最近公共祖先表示为一个节点 x,满足 ...

  4. 由浅入深:求给定两个树节点的最低公共祖先(二叉树、普通树结构)JAVA实现

    最近看了一道面试题目,觉得很有意思,而且常常被问到,今天综合归纳了一下这道题目,并给出了各种变形题目,附上JAVA版的程序解答. 题目是这样的:寻找二叉树的最低公共祖先?(其中隐含着一个盲点:树是什么 ...

  5. 判断两棵树是否相等与使用二叉链表法建立二叉搜索树

    //判断两个二叉树是否相等 //提问如果两个二叉树的前序遍历相等,能否说明,这两个树相等? //答案是否定的,只有这两个树的 A前序=B前序,A中序=B中序才可以. BOOL isEqualTree( ...

  6. 二叉树(二):判断是不是二叉搜索树、判断是不是完全二叉树、判断是不是平衡二叉树、二叉搜索树的最近公共祖先、在二叉搜索树中找到两个节点的最近公共祖先、序列化二叉树、重建二叉树、输出二叉树的右视图

    目录 一.判断是不是二叉搜索树 1.1 题目 1.2 题解 二.判断是不是完全二叉树 2.1 题目 2.2 题解 三.判断是不是平衡二叉树 3.1 题目 3.2 题解 四.二叉搜索树的最近公共祖先 4 ...

  7. 3005-基于二叉链表的二叉树最大宽度的计算(附思路,注释,可能错误分析)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法计算该二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值). 输入 多组数据.每组数据一行,为二叉树 ...

  8. 3006基于二叉链表的二叉树最长路径的求解(附思路)

    描述 设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,编写算法求出该二叉树中第一条最长的路径. 输入 多组数据.每组数据一行,为二叉树的先序序列(序列中元素为'0'时,表示该结点为 ...

  9. 3007基于二叉链表的二叉树叶子结点到根结点的路径的求解(附DFS在树里的应用分析,思路详解)

    以下代码用到的前置知识:DFS算法 可以看这个视频~只用看这个就能懂了~ DFS深搜解决迷宫问题(原理分析+代码实现)_哔哩哔哩_bilibilihttps://www.bilibili.com/vi ...

最新文章

  1. 基于曲率的体素聚类的三维激光雷达点云实时鲁棒分割方法
  2. go加载python_人生苦短我用python(02)动态加载模块-Go语言中文社区
  3. 大数据技术学习路线,有信心能坚持学习的朋友,从现在开始吧
  4. 学python需要什么基础知识-Python学习(一)基础知识
  5. redis 缓存击穿 看一篇成高手系列 三
  6. linux运维决心书!
  7. 迭代器 java_百战程序员:Java设计模式之迭代器模式
  8. [水动力学] 水动力学期末复习
  9. spring:使用会话和请求作用域
  10. paroot忘记root密码
  11. 雷达图像与电子海图叠加坐标变化优化方法
  12. 简单74LS138介绍(抄自原理图)
  13. vue3.0页面模板-示例
  14. java哨兵模式_哨兵模式详解
  15. safari浏览器找不到服务器怎么办,safari打不开网页因为服务器已停止响应解决方法...
  16. 绿盟漏扫使用手册_【技术干货】Oracle数据库漏洞扫描指南
  17. 股票实时行情接口编程难度大吗?
  18. 人脸实名认证实现方案(微信H5百度云篇)
  19. 【屌丝之作】3D遥控坦克大战
  20. 【我很简单,请不要欺负我】模拟环境渗透详细记录

热门文章

  1. Java中解决继承和接口默认方法冲突
  2. datatable 转list ,list转datatable
  3. 第二阶段团队项目冲刺第一天
  4. 数据--dp,线段树优化
  5. Spring 中设置依赖注入
  6. linux下php安装
  7. Microsoft MVC3 框架
  8. PHP 查找链表倒数第i个节点
  9. 来自官方文档的Ubuntu 16.04 + tensorflow-GPU 配置
  10. 两个有序链表序列的合并编程