1099 Build A Binary Search Tree

Posted CSU迦叶

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1099 Build A Binary Search Tree相关的知识,希望对你有一定的参考价值。

1. 本题给出了树的样子,给出了用来填充的数列,并且告诉是一棵二叉查找树。

2. 先用静态存储的方式将树的框架建立起。然后对数列进行小到大排序,利用BST中序遍历是升序的性质,通过中序遍历将数值填充的树中。

3. 层序输出的时候注意,用来控制是否输出空格的变量(1)初始化为0(2)定义在函数外

AC代码

#include<cstdio>
#include<map>
#include<set>
#include<string>
#include<cstring>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>
#include<algorithm>
#include<cmath>
typedef long long LL;

using namespace std;

const int maxn = 110;

struct Node{
	int data = -1,lchild,rchild;
}node[maxn];

int n,data[maxn];
int num = 0;

void inOrder(int root){
	
	if(root==-1)return;
	
	inOrder(node[root].lchild);
	node[root].data = data[num++];
	inOrder(node[root].rchild); 
}

void levelOrder(){
	queue<int> que;
	que.push(0);
	int num = 0;
	while(!que.empty()){
		int top = que.front();
		printf("%d",node[top].data);
		num++;
		if(num!=n)printf(" ");
		que.pop();
		if(node[top].lchild!=-1)que.push(node[top].lchild);
		if(node[top].rchild!=-1)que.push(node[top].rchild);
	}
}

int main(){
	scanf("%d",&n);
	for(int i=0;i<n;i++){
		scanf("%d %d",&node[i].lchild,&node[i].rchild);
	}
	for(int i=0;i<n;i++)scanf("%d",&data[i]);
	
	sort(data,data+n);
	 
	inOrder(0);
	
	levelOrder();
	
	return 0;
}

以上是关于1099 Build A Binary Search Tree的主要内容,如果未能解决你的问题,请参考以下文章

PAT1099:Build A Binary Search Tree

PAT 甲级 1099 Build A Binary Search Tree

PAT Advanced 1099 Build A Binary Search Tree (30分)

1099. Build A Binary Search Tree (30)二叉树——PAT (Advanced Level) Practise

PAT-1099(Build A Binary Search Tree)

1099. Build A Binary Search Tree (30)二叉树——PAT (Advanced Level) Practise