二叉树遍历
来源:互联网 发布:威科姆网络机顶盒 编辑:程序博客网 时间:2024/05/29 16:08
由二叉树的后序遍历和中序遍历,求前序遍历
方法1:不用构造二叉树,在遍历过程中就可求得前序遍历
#include<stdio.h>#include<stdlib.h>typedef struct TNode* BinTree;struct TNode{ int data; BinTree left,right;};void build(int* post,int* in,int n,int* ans){//有后序遍历post和中序遍历in,求前序遍历ans if(!n) return; int i; for(i=0;i<n;i++){ if(post[n-1]==in[i]) break; } build(post,in,i,ans+1); build(post+i,in+i+1,n-1-i,ans+i+1); ans[0]=post[n-1];}int main(){ int N; scanf("%d",&N); int post[N],in[N],ans[N]; int i; for(i=0;i<N;i++){ scanf("%d",&post[i]); } for(i=0;i<N;i++){ scanf("%d",&in[i]); } build(post,in,N,ans); for(i=0;i<N;i++){ printf("%d ",ans[i]); } return 0;}
法2:先构造二叉树,在前序遍历
#include<stdio.h>#include<stdlib.h>typedef struct TNode* BinTree;struct TNode{ int data; BinTree left,right;};BinTree build(int* post,int* in,int n){//有后续便利和中序遍历构造二叉树 if(!n) return NULL; BinTree root=malloc(sizeof(struct TNode)); int i; for(i=0;i<n;i++){ if(post[n-1]==in[i]) break; } root->data=post[n-1]; root->left=build(post,in,i); root->right=build(post+i,in+i+1,n-1-i); return root;}void pre_travel(BinTree root){//前序遍历二叉树 if(!root) return; printf("%d ",root->data); pre_travel(root->left); pre_travel(root->right);}//void in_travel(BinTree root){//中序遍历二叉树 // if(!root) return;// in_travel(root->left);// printf("%d ",root->data);// in_travel(root->right);//} //void post_travel(BinTree root){//后序 // if(!root) return;// post_travel(root->left);// post_travel(root->right);// printf("%d ",root->data);//}int main(){ int N; scanf("%d",&N); int post[N],in[N],ans[N]; int i; for(i=0;i<N;i++){ scanf("%d",&post[i]); } for(i=0;i<N;i++){ scanf("%d",&in[i]); } BinTree root=build(post,in,N); pre_travel(root);printf("\n"); in_travel(root);printf("\n"); post_travel(root);printf("\n"); return 0;}
0 0
- 二叉树遍历、分层遍历
- 遍历二叉树--二叉树
- 【树】遍历二叉树
- 二叉树遍历
- 二叉树遍历
- 二叉树的遍历
- (原创)遍历二叉树
- 二叉树遍历-php
- 查找--遍历二叉树
- 遍历二叉树
- 二叉树遍历规则
- 二叉树的遍历
- 二叉树遍历
- 遍历二叉树
- 二叉树遍历问题
- 二叉树遍历
- 二叉树遍历(zz)
- 二叉树的遍历
- 给View设置selector无效的解决办法。
- HBASE笔记
- Kotlin+Anko 你应该尝试的新Android开发方式
- MFC基于对话框上插入MENU菜单栏并点击菜单弹出新窗口
- Unity中的DeCoroutine
- 二叉树遍历
- 学习AIDL,这一篇文章就够了
- 碎片和活动之间进行通信
- ubuntu gitlab 搭建
- C语言算法整理
- vsftp安装、配置
- 关于iOS的UITableView的rowheight的自动计算
- c语言编程实现简单三子棋游戏
- 为什么需要学Gradle?