解题报告-PAT-Complete Binary Search Tree

来源:互联网 发布:北上战舰世界数据 编辑:程序博客网 时间:2024/05/22 11:57

原题链接:https://pta.patest.cn/pta/test/1342/exam/4/question/20493

浙大oj:1064题

输入题意:输入一组数,根据这组数构造一个二叉排序树而且是完全二叉树。输出这个树的层次遍历序列。

解题思路:

先把输入的序列排序得到num[]数组,然后构造一个普通的n个节点的完全二叉树,节点值可以随意输入,之后利用中序遍历将num[]数组中的值一次填入,利用了二叉排序树的中序遍历序列是递增序列的性质。

源代码:

# include <stdio.h># include <algorithm># define MAX 1010using namespace std;  typedef struct Node{struct Node *l;struct Node *r;int data;}*BiTree,Node; int num[MAX]; BiTree q[MAX];  //层次遍历队列 int co = 0;  //中序遍历填数标记 //递归中序遍历 void InOrder(BiTree T){if(T!=NULL){InOrder(T->l);T->data = num[co++];InOrder(T->r);}}/*解题思路:先层次遍历构造一个二叉链表存储的完全二叉树在中序遍历填入相关数据最后层次遍历输出 */ int main(){//预处理 int n;scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&num[i]);}sort(num,num+n);//层次遍历建完全二叉树 BiTree p,T;//初始化根节点 T = (BiTree) malloc(sizeof(Node));T->data=1;T->l = T->r = NULL;int count = 1,front =0,rear = 1;q[0] = T; //初始化队列 while(count <n && front < rear){p = q[front++];if(p->l == NULL){BiTree temp;temp = (BiTree)malloc(sizeof(Node));temp -> l = temp -> r = NULL; temp -> data = count+1; //数据填入什么都可以,之后还要重新填入 p->l = temp;  q[rear++] = temp;count++;if(count >= n) break;}if(p->r == NULL){BiTree temp;temp = (BiTree)malloc(sizeof(Node));temp->l = temp->r = NULL; temp ->data = count+1;p->r = temp;q[rear++] = temp;count++;if(count >= n) break;}}//中序遍历填入数据InOrder(T);//层次遍历输出结果 front = 0;  rear = 1;q[0] = T;int flag = 0; //输出格式控制 while(front < rear){p = q[front++];if(p->l!=NULL)q[rear++] = p->l;if(p->r!=NULL)q[rear++] = p->r;if(flag)printf(" ");flag++;printf("%d",p->data);}printf("\n");return 0;} 


0 0
原创粉丝点击