PAT 1020 Tree Traversals

来源:互联网 发布:中国网络空间安全网 编辑:程序博客网 时间:2024/05/16 17:02

题目的目的是很简单明了的,就是给定一棵二叉树的后序序列和中序序列,要求我们给出层次遍历的序列。

本题的关键点在于二叉树的重建和层次遍历。

本题是利用后序序列和中序序列来进行二叉树的重建,参考函数如下:

Node * rebuild(int *post,int *in,int len ){     if(len == 0)         return NULL; //判断是否为空树    int i=len-1;     while(post[len-1] != in[i])i--;//查找根节点的位置    Node *p1;    p1=new Node;     p1->data=post[len-1];     p1->left=rebuild(post,in,i);//左子树的重建     p1->right=rebuild(post+i,in+i+1,len-i-1); //右子树的重建    return p1; } 
关于层次遍历,小编借鉴了下课件,运用的是循环数组来实现:

void levelorder(Node *p){Node *q,*circle[MaxSize];   //建立循环数组int front=-1,rear=0,flag=0;circle[rear]=p;while(front!=rear){front=(front+1)%MaxSize;q=circle[front];if(flag==0)//用来判断是否为根节点{flag=1;printf("%d",q->data);}elseprintf(" %d",q->data);if(q->left!=NULL ){rear=(rear+1)%MaxSize;circle[rear]=q->left;}if(q->right!=NULL){rear=(rear+1)%MaxSize;circle[rear]=q->right;}}}
总结:

最近做题目挺适合提高自己的编程能力的,所以开始写写博文记录下自己的成长,一方面自己可以回头看看编写过的代码回顾算法的等,另一方面也可以跟大家一起分享下,由于小编编程能力尚属中下,望众大牛勿喷。有优化的方法或建议恳请大家留言,小编很希望能持续提升自己的编程水平。


原创粉丝点击