hdu 1710 二叉树的遍历
题目:http://acm.hdu.edu.cn/showproblem.php?pid=1710
大意:给出一个二叉树的前序和中序,求其后序遍历
ps:1.在写链表时,需要写明typedef struct node{};即声明一个指向自己的数据类型,而不是直接写struct node{}
2.采用分治的思想,把一颗二叉树分解成n棵二叉树,每棵都有其对应的根节点,利用这点进行遍历
3.malloc在#include<stdlib.h>头文件中
4.这是自己第一次写数据结构树型题目,所以代码是借鉴而来的
1 #include<iostream> 2 #include<stdio.h> 3 #include<stdlib.h> 4 5 using namespace std; 6 7 typedef struct node{ 8 node *l,*r; 9 int num; 10 }tree; 11 12 tree *root; 13 14 tree *creat(int *a,int *b,int n){ 15 tree *t; 16 for(int i=0;i<n;i++){ 17 if(a[0] == b[i]){//找到根节点 18 t = (tree *)malloc(sizeof(tree)); 19 t->num = b[i]; 20 t->l = creat(a+1,b,i); 21 t->r = creat(a+i+1,b+i+1,n-i-1); 22 return t; 23 } 24 } 25 return NULL; 26 } 27 28 void houxu(tree *h){ 29 if(h!=NULL){ 30 houxu(h->l); 31 houxu(h->r); 32 if(h == root) 33 cout<<h->num<<endl; //最后是根节点 34 else 35 cout<<h->num<<" "; 36 } 37 return ; 38 } 39 40 int main(){ 41 int n; 42 int a[1005],b[1005]; 43 while(cin>>n){ 44 for(int i=0;i<n;i++) 45 scanf("%d",a+i); 46 for(int i=0;i<n;i++) 47 scanf("%d",b+i); 48 root = creat(a,b,n); 49 tree *h = root; 50 houxu(h); 51 } 52 return 0; 53 }
作者:pngcui
博客园:http://www.cnblogs.com/pngcui/
github:https://github.com/pngcui
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明。