博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
树中两个结点的最低公共祖先
阅读量:6656 次
发布时间:2019-06-25

本文共 1808 字,大约阅读时间需要 6 分钟。

题目描述:

给定一棵树,同时给出树中的两个结点,求它们的最低公共祖先。

输入:

输入可能包含多个测试样例。

对于每个测试案例,输入的第一行为一个数n(0<n<1000),代表测试样例的个数。
其中每个测试样例包括两行,第一行为一个二叉树的先序遍历序列,其中左右子树若为空则用0代替,其中二叉树的结点个数node_num<10000。
第二行为树中的两个结点的值m1与m2(0<m1,m2<10000)。

输出:

对应每个测试案例,

输出给定的树中两个结点的最低公共祖先结点的值,若两个给定结点无最低公共祖先,则输出“My God”。

样例输入:
21 2 4 6 0 0 7 0 0 5 8 0 0 9 0 0 3 0 06 81 2 4 6 0 0 7 0 0 5 8 0 0 9 0 0 3 0 06 12
样例输出:
2My God

 

#include 
#include
#include
using namespace std;struct Node{ int x; struct Node *left; struct Node *right;};int path1[10000],path2[10000];int top1 = -1,top2 = -1;void createTree(Node *&root){ int x; scanf("%d",&x); if(!x) root = NULL; else{ root = new Node; root->x = x; createTree(root->left); createTree(root->right); }}bool getPath(Node *root,int x,int path[],int &top){ path[++top] = root->x; if(root->x == x) return true; bool found = false; if(root->left) found = getPath(root->left,x,path,top); if(!found && root->right) found = getPath(root->right,x,path,top); if(!found) top--; return found;}int getCommonNode(int path1[],int path2[]){ int x; int i = 0,j = 0; while(i <= top1 && j <= top2){ if(path1[i] == path2[j]) x = path1[i]; i++;j++; } return x;}void destory(Node *&root){ if(root){ destory(root->left); destory(root->right); delete root; root = NULL; }}void print(Node *root){ if(root){ printf("%d ",root->x); print(root->left); print(root->right); }}int main(int argc, char const *argv[]){ int n,a,b; while(scanf("%d",&n) != EOF){ while(n--){ Node *root; createTree(root); scanf("%d %d",&a,&b); top1 = -1;top2 = -1; if(!getPath(root,a,path1,top1)){ printf("My God\n"); continue; } if(!getPath(root,b,path2,top2)){ printf("My God\n"); continue; } destory(root); printf("%d\n",getCommonNode(path1,path2)); } } return 0; }

 

 

转载地址:http://zyxto.baihongyu.com/

你可能感兴趣的文章
《统一沟通-微软-实战》-6-部署-7-部署移动功能-2
查看>>
go语言笔记——调试还很弱,用gdb来做?可用panic和defer。格式化代码使用gofmt,貌似我的vim插件是自带...
查看>>
Linux 安装.src.rpm源码包的方法
查看>>
c#将对象序列化为字符串和将字符串反序列化为对象
查看>>
Android Loader详解四:回调及完整例子
查看>>
Oracle笔记 三、function 、select
查看>>
PHP5.5面向对象连接mysqli
查看>>
一步一步教你使用AgileEAS.NET基础类库进行应用开发-WinForm应用篇-在UI中应用DataUIMapper组件...
查看>>
Linux命令大全
查看>>
git 拉取和获取 pull 和 fetch 区别
查看>>
html5系列目录
查看>>
C# 视频监控系列(1):准备
查看>>
6.3. 获取当前用户
查看>>
软件架构中的层次依赖
查看>>
两个容易被忽略的mysql知识
查看>>
ORACLE SOA SUITE ORABPEL-12133 错误解决
查看>>
除了新闻识别,这家媒体还利用AI管理内容分发,2500万人已关注
查看>>
【Python】执行系统命令的常见用法
查看>>
Yarn 安装
查看>>
敏捷开发中如何定义“完成”?
查看>>