
2020第12-14周练习——7-3 顺序存储的二叉树的最近的公共祖先问题 (20分)
发布日期:2021-05-06 20:35:20
浏览次数:18
分类:技术文章
本文共 931 字,大约阅读时间需要 3 分钟。
设顺序存储的二叉树中有编号为i和j的两个结点,请设计算法求出它们最近的公共祖先结点的编号和值。
输入格式:
输入第1行给出正整数n(≤1000),即顺序存储的最大容量;第2行给出n个非负整数,其间以空格分隔。其中0代表二叉树中的空结点(如果第1个结点为0,则代表一棵空树);第3行给出一对结点编号i和j。题目保证输入正确对应一棵二叉树,且1≤i,j≤n。
输出格式:
如果i或j对应的是空结点,则输出ERROR: T[x] is NULL,其中x是i或j中先发现错误的那个编号;否则在一行中输出编号为i和j的两个结点最近的公共祖先结点的编号和值,其间以1个空格分隔。输入样例1:
154 3 5 1 10 0 7 0 2 0 9 0 0 6 811 4
输出样例1:
2 3
输入样例2:
154 3 5 1 0 0 7 0 2 0 9 0 0 6 812 8
输出样例2:
ERROR: T[12] is NULL
思路
根据课本,非完全二叉树的顺序存储 不管你要输入的点双亲是不是0,它都给你放上去。所以第6个节点是0,第12个和第13是第6个节点的左右子树也为零。 节点i,左子树2i,右子树2i+1 代码#includeusing namespace std;int xx[1001],parent[1001];int fun(int a,int b){ if(a==b) return a; if(a>b) return fun(a/2,b); else return fun(a,b/2);}int main(){ int n,a,b; cin>>n; for(int i=1;i<=n;i++) cin>>xx[i]; cin>>a>>b; if(xx[a]==0) cout<<"ERROR: T["< <<"] is NULL"; else if(xx[b]==0) cout<<"ERROR: T["<<<"] is NULL"; else{ int num=fun(a,b); cout< <<" "<
发表评论
最新留言
感谢大佬
[***.8.128.20]2025年03月21日 08时40分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
2021年低压电工考试及低压电工考试申请表
2019-03-03
2021年A特种设备相关管理(电梯)考试APP及A特种设备相关管理(电梯)复审考试
2019-03-03
2021年N1叉车司机考试题及N1叉车司机复审模拟考试
2019-03-03
2021年危险化学品经营单位主要负责人考试APP及危险化学品经营单位主要负责人多少钱
2019-03-03
2021年T电梯修理考试技巧及T电梯修理模拟考试软件
2019-03-03
2021年电工(初级)考试及电工(初级)证考试
2019-03-03
大数据学习之Spark——00Spark项目的pom.xml文件
2019-03-03
CodeBlocks开发wxWidgets环境配置详细
2019-03-03
天涯人脉通讯录 - 设计草图
2019-03-03
wxWidgets 最新版2.8.11,终于放出来了
2019-03-03
python学习09:暂停一秒后再输出
2019-03-03
6、ShardingSphere 之 读写分离
2019-03-03
C++ STL
2019-03-03
解方程
2019-03-03
练习赛 位运算 思维 思维
2019-03-03
Netty 粘包 拆包 | 史上最全解读
2019-03-03
【调剂】其它计算机/软件调剂信息 20.4.21
2019-03-03
【调剂】华侨大学媒体分析与数据挖掘小组招收学硕调剂生
2019-03-03
【调剂】211云南大学2020年硕士研究生招生调剂通知
2019-03-03