A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历
Posted leamant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历相关的知识,希望对你有一定的参考价值。
二叉树的遍历 题型
此类题做法
1.定义节点
2.构造二叉树{
a.边界条件
b.建立新节点root
存入根节点数据(由后序或先序
c. k 遍历中序,找到相等的值
d. 得出左子树个数(中序的 )
e.返回左子树根节点地址,返回右子树根节点地址,return root;
3.层次遍历{
a.创建队列,queue
b.把root进队 q.push(root)(这是所有的root。。???)
c.输出层次遍历数据{
判空-》取出首元素-》清空队列(防止超时)-》printf元素,-》判断左子树空或插入,右子树空或插入
#include<cstdio> #include<queue> //#include<cstring> //#include<algorithm> using namespace std; const int maxn=50; struct node{ int data; node* lchild; node* rchild; }; int pre[maxn],post[maxn],in[maxn]; int n; node* create(int postL,int postR,int inL,int inR) { if(postL>postR){ return NULL; } node* root =new node;//申请一个node型变量空间 root->data=post[postR]; int k; for(k=inL;k<=inR;k++)//遍历,从左到右边的值 { if(in[k]==post[postR]) break; } int numLeft=k-inL; root->lchild=create(postL,postL+numLeft-1,inL,k-1); root->rchild=create(postL+numLeft,postR-1,k+1,inR); return root; } int num=0; void BFS(node* root) { queue<node*> q; q.push(root); while(!q.empty()){ node* now=q.front(); q.pop(); printf("%d",now->data); num++; if(num<n) printf(" "); if(now->lchild!=NULL) q.push(now->lchild); if(now->rchild!=NULL) q.push(now->rchild); } } int main() { scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&post[i]); } for(int i=0;i<n;i++){ scanf("%d",&in[i]); } node* root =create(0,n-1,0,n-1); BFS(root); return 0; }
以上是关于A 1020 Tree Traversals (25分) 题型: 二叉树的遍历 之 由后序和中序得到层次遍历的主要内容,如果未能解决你的问题,请参考以下文章