题目描述:
一颗二叉树按顺序存储结构进行存储,设计一个算法,求编号i和j的最近公共祖先

思路:
已知:二叉树、顺序存储
空的结点用“#”表示
如果i,j所在位置的结点数据不是“#”,才有公共结点;
若i<j,则j和i可能在同一层,或者比i的层数高,找j的双亲结点,j/2,再重复进行比较;
若i>j,则i和j可能在同一层,或者比j的层数高,找i的双亲结点,i/2,再重复进行比较;
直到i==j,就是最近公共结点的编号。

#include<stdio.h>
//二叉树顺序存储结构
#define MXASIZE 20
typedef struct Bt{int no;char num;
}BiTNode;
typedef struct BT{BiTNode data[MXASIZE];
}SqTree,*ST;
//求二叉树两个节点的最近公共祖先
char common(ST T,int i,int j){if(i==j)return T->data[i].num;else if(i>j){return common(T,i/2,j);}elsereturn common(T,i,j/2);
}
int main(){ST T;SqTree t;char ch;int n,m;int i=1;T=&t;//如果利用指针进行访问,这是关键的一步,指针变量初始化ch='a';#if(0)//**这里直接访问结构成员**for(i=1;i<7;i++){t.data[i].no=i;t.data[i].num=ch;ch++;}t.data[5].num='#';for(i=1;i<7;i++){printf("%d %c\n",t.data[i].no,t.data[i].num);}scanf("%d%d",&n,&m);if(t.data[n].num!='#'&&t.data[m].num!='#'){printf("%c\n",common(T,n,m));}
#endif//**这里采用指针进行访问**
for(i=1;i<7;i++){T->data[i].no=i;T->data[i].num=ch;ch++;}T->data[5].num='#';for(i=1;i<7;i++){printf("%d %c\n",T->data[i].no,T->data[i].num);}//T->data[5].num='#';scanf("%d%d",&n,&m);if(T->data[n].num!='#'&&T->data[m].num!='#'){printf("%c\n",common(T,n,m));}return 0;
}

求二叉树两个结点的最近公共祖先相关推荐

  1. 50:树中两个结点的最低公共祖先

    题目:求树中两个结点的最低公共祖先,此树不是二叉树,并且没有指向父节点的指针. 树的结点定义 private static class TreeNode {int val;List<TreeNo ...

  2. 寻找二叉树中两个结点的最近公共祖先

    寻找二叉树中两个结点的最近公共祖先(这两个结点一定在树中) 对于二叉树中两个结点的最近公共祖先来说 ,这两个结点分别在自己的左子树和右子树中,所以要寻找二叉树中两个结点的最近公共祖先可以: 从根结点开 ...

  3. 树中两个结点的最低公共祖先

    题目描述: 给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先. 输入: 输入可能包含多个测试样例. 对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数 ...

  4. 寻找树中两个结点的最低公共祖先

    寻找树中两个结点的最低公共祖先 Q:在树中寻找两个结点的最低公共祖先,是什么意思呢? A:树是由根节点衍生左右孩子继续衍生左右孩子的左右孩子.所以呢树中的两个结点是一定拥有最低公共祖先(这两个结点Q: ...

  5. 【IT笔试面试题整理】寻找二叉树两节点的最近的公共祖先

    [试题描述] 求二叉树中任意两个节点的最近公共祖先也称为LCA问题(Lowest Common Ancestor). 二叉查找树 如果该二叉树是二叉查找树,那么求解LCA十分简单. 基本思想为:从树根 ...

  6. 二叉树两个结点的最低公共父结点 【微软面试100题 第七十五题】

    题目要求: 输入二叉树中的两个结点,输出这两个及诶单在数中最低的共同父结点. 题目分析: 还有一种情况:如果输入的两个结点中有一个或两个结点不在二叉树中,则输出没有共同父结点: 因此,可以在程序中定义 ...

  7. 二叉树找到两个结点的最近公共祖先

    面试题68 - I. 二叉搜索树的最近公共祖先 https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu- ...

  8. 二叉树中找两个结点的最近公共祖先结点

    一.搜索二叉树:第一变种是二叉树是一种特殊的二叉树:查找二叉树.也就是树是排序过的,位于左子树上的结点都比父结点小,而位于右子树的结点都比父结点大.我们只需要从根结点开始和两个结点进行比较.如果当前结 ...

  9. Lowest Common Ancestor of a Binary Search Tree(树中两个结点的最低公共祖先)

    题目描述: Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in ...

最新文章

  1. linux后门查杀工具付费,查杀linux后门跑虚拟货币程序.md
  2. Android中常见的MVC模式
  3. 学习Kotlin(三)类和接口
  4. 【✈️️️排序算法,一文讲尽!Top 10 Sort Algorithms✈️️️】C/C++ 实现经典十大排序算法
  5. python3 cgi传数据
  6. git 入门教程之版本管理
  7. Error:Internal error: org.gradle.tooling.BuildException: Could not run build action using Gradle dis
  8. SpringCloud Netflix Hystrix
  9. 修改Gradle本地仓库的位置 方法
  10. 极递云课显示服务器连接超时,服务器连接问题
  11. 数据库查询·聚合分支格式化日期·思维导图要点误点(含示例)
  12. TreeView 用法(有代码)
  13. maya破解版安装python_Maya mayapy.exe 安装 Cython,编译 pyd
  14. 网易服务器维护,网易:方便玩家 各大区服务器维护详细时间表列
  15. 知物由学 | Android 模拟点击研究,如何突围“黑灰产”的自动化作弊?
  16. C语言入门(一)——程序的基本概念
  17. 计算机快捷键英语,计算机快捷键(国外英语资料).doc
  18. From.Designer.cs和From.cs的关系
  19. Opencv__模板匹配(上)
  20. cf85d treap

热门文章

  1. [翻译] UIColor-uiGradientsAdditions
  2. c7中取4c语言编程软件,使用scanf读取C程序中的文本
  3. 基于Qt视频监控系统(百度地图,屏幕分割,双击放大,视频录制回放)下篇
  4. Java 循环-万年历(日历)
  5. node.js和npm的安装与环境配置(2021最新版)
  6. Markdown 实现文内链接跳转
  7. 渗透测试学习8:文件上传攻击
  8. 使用Unity3D 自主实战开发的赛车游戏实例
  9. 计算机图行学有很多应用 下列直接的应用是,计算机图形学(计算机合成图像)有很多应用,以下所列中最直接的应用是...
  10. 2010上海企业宽带最佳选择