//指定了树结构的BST
Sample Input:
//给定了树结构,输入顺序为结点编号(0~N-1)(Node[]下标),root为0结点,-1代表无孩子
9
1 6
2 3
-1 -1
-1 4
5 -1
-1 -1
7 -1
-1 8
-1 -1
//给定了需要的放入那些固定位置的结点的值
73 45 11 58 82 25 67 38 42
Sample Output:
//层序遍历
58 25 82 11 38 67 45 73 42
//将给定的二叉树结点中序遍历,他们应该是有序的,所以将这些节点的下标(Node[]里的下标)存放到a[]中用来被赋值,
//将给定的数排序成number[],对应赋值即:index=0; for(){ Node[a[index++]] = number[index++];
//最后遍历
//code:
#include <cstdio>
#include <algorithm>
#include <queue>
using namespace std;
const int MAXN = 2020;
struct node{
int data;
int lChild; //静态(数组)存储
int rChild;
} Node[MAXN];
int N, number[MAXN], a[MAXN], index = 0;
void inOrder(int root) {
if(root == -1) return;
inOrder(Node[root].lChild);
a[index++] = root; //a[]存放的是下标
inOrder(Node[root].rChild);
}
void solve() {
index = 0;
for(int i=0; i<N; i++)
Node[a[i]].data = number[index++];
}
void levelOrder(int root) {
queue<int> q;
q.push(root);
while(!q.empty()) {
int now = q.front();
q.pop();
printf("%d",Node[now].data);
if(Node[now].lChild != -1) q.push(Node[now].lChild);
if(Node[now].rChild != -1) q.push(Node[now].rChild);
if(!q.empty()) printf(" ");
}
}
int main() {
scanf("%d",&N);
for(int i=0; i<N; i++) {
int left_index, right_index;
scanf("%d%d",&left_index,&right_index);
if(left_index != -1) Node[i].lChild = left_index;
else Node[i].lChild = -1; 不用NULL,既然是数组
if(right_index != -1) Node[i].rChild = right_index;
else Node[i].rChild = -1;
}
for(int i=0; i<N; i++)
scanf("%d",&number[i]);
sort(number, number + N);
inOrder(0);
solve(); //对应赋值
levelOrder(0);
return 0;
}
1099 Build A Binary Search Tree (30)
最新推荐文章于 2023-02-05 20:03:34 发布