首页 > 其他 > 详细

1099 Build A Binary Search Tree

时间:2020-03-03 19:42:47      阅读:63      评论:0      收藏:0      [点我收藏+]

大致题意就是给出 N个结点的左孩子结点下标、右孩子结点下标,然后构造一棵 静态二叉树。再给出一个包含N个整数的序列,把这些整数一 一填入这棵二叉树中,使其成为一棵二叉查找树,最后输出其层序遍历序列。

思路:

第一步,根据每个结点的左孩子下标、右孩子下标构造一棵二叉树;

第二步,把包含N个结点的整数序列按从小到大排序;

第三步,中序遍历这个二叉树,把整数一 一填入每个结点,最后得到一棵二叉查找树;

第四步,输出这个二叉查找树的层序遍历序列。

 1 #include<iostream>
 2 #include<queue>
 3 #include<algorithm>
 4 using namespace std;
 5 
 6 const int maxn = 200;
 7 struct Node {
 8     int data;
 9     int left ,right;
10 } node[maxn];
11 
12 int in[maxn],index = 0;
13 
14 void inorder(int root) { //中序遍历,构造二叉查找树
15     if(root == -1) return ; //叶子节点,直接返回
16     inorder(node[root].left);
17     node[root].data = in[index++];
18     inorder(node[root].right);
19 }
20 
21 int num = 0;
22 void levelorder(int root) {//层序遍历
23     //第一步,定义队列并入队
24     queue<int> que;
25     que.push(root);
26     //第二步,判断队列非空
27     while(!que.empty()) {
28         //第三步,访问队首元素并出队
29         int now = que.front();
30         if(num > 0) printf(" ");
31         printf("%d",node[now].data);
32         num++;
33         que.pop();
34         //第四步,下一层元素(左、右孩子)入队
35         if(node[now].left != -1) que.push(node[now].left);
36         if(node[now].right != -1) que.push(node[now].right);
37     }
38 }
39 
40 int main() {
41     int n;
42     cin>>n;
43     for(int i = 0; i < n; ++i) //构造二叉树
44         cin>>node[i].left>>node[i].right;
45     for(int i = 0; i < n; ++i)
46         cin>>in[i];
47     sort(in,in+n);//递增排序
48     inorder(0); //中序遍历
49     levelorder(0);//层序遍历
50     return 0;
51 }

技术分享图片

 

1099 Build A Binary Search Tree

原文:https://www.cnblogs.com/keep23456/p/12404041.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!