博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过层序和中序遍历序列重建二叉树
阅读量:5023 次
发布时间:2019-06-12

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

  在学二叉树的重建时,在《算法笔记》上学到了如何通过先序(或后序)遍历序列和中序遍历序列重建二叉树,它也提出了一个问题:如何通过层序和中序遍历序列重建二叉树?我一开始按照先序和中序重建的思路思考,发现做不到。我无法确定一个点后面的点属于它的左子树还是右子树或者兄弟节点。于是我在网上查找,发现这方面的话题不多,其中还有一些不是用C++实现的。不过幸好还是找到了。于是在学习之后在这把它记录下来。

1 #include 
2 #include
3 using namespace std; 4 5 int ceng[100]; 6 int zhon[100]; 7 8 9 struct node10 {11 int data;12 node* left;13 node* right;14 };15 16 node* create(int cengl,int cengr,int zhonl,int zhonr) //当我给你一个二叉树的中序遍历时 17 { //这个中序遍历遍历一定有一个根节点 18 if(zhonl>zhonr) //体现在层序遍历上时它一定先出现 19 { //所以顺序遍历层序遍历,一定可以先发现二叉树的根节点 20 return NULL; 21 }22 node* root=new node;23 int i,j;24 int flag;25 for(i=0;i<=(cengr-cengl);i++)26 {27 flag=false;28 for(j=0;j<=(zhonr-zhonl);j++)29 {30 if(ceng[i+cengl]==zhon[j+zhonl])31 {32 flag=true;33 break;34 }35 }36 if(flag) break;37 }38 root->data=zhon[j+zhonl]; 39 root->left=create(cengl+i+1,cengr,zhonl,zhonl+j-1);40 root->right=create(cengl+i+1,cengr,zhonl+j+1,zhonr); 41 return root;42 }43 44 void cengxu(node* root)45 {46 queue
q;47 q.push(root);48 while(!q.empty())49 {50 node* top=q.front();51 q.pop();52 if(top!=root) printf(" ");53 printf("%d",top->data);54 if(top->left) q.push(top->left); 55 if(top->right) q.push(top->right);56 }57 }58 59 60 int main()61 {62 int n;63 scanf("%d",&n);64 for(int i=0;i

  这个重建的方法利用了层序遍历序列中父子节点有先后顺序的特点。

转载于:https://www.cnblogs.com/thesky/p/10614313.html

你可能感兴趣的文章
51nod 1433 0和5【数论/九余定理】
查看>>
【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】
查看>>
less 分页显示文件内容
查看>>
如何对数据按某列进行分层处理
查看>>
[Qt] this application failed to start because it could not find or load the Qt platform plugin
查看>>
Git Submodule管理项目子模块
查看>>
学会和同事相处的30原则
查看>>
NOJ——1568走走走走走啊走(超级入门DP)
查看>>
文件操作
查看>>
Python:GUI之tkinter学习笔记3事件绑定(转载自https://www.cnblogs.com/progor/p/8505599.html)...
查看>>
jquery基本选择器
查看>>
hdu 1010 dfs搜索
查看>>
搭建wamp环境,数据库基础知识
查看>>
android中DatePicker和TimePicker的使用
查看>>
SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
查看>>
Android中获取应用程序(包)的大小-----PackageManager的使用(二)
查看>>
Codeforces Gym 100513M M. Variable Shadowing 暴力
查看>>
浅谈 Mybatis中的 ${ } 和 #{ }的区别
查看>>
CNN 笔记
查看>>
版本更新
查看>>