PAT 1043【BST与二叉树】

考察:
1.二叉树的建树
2.前序遍历,后序遍历
3.BST的特性


这题的思路:
告诉你数组是先序遍历的,so 根已经知道了(数组首位元素),那么按照BST,建一下树(要两次,另外一次是镜像的);
跑一跑先序遍历,对一对是不是呀?
然后是的话就输出后序遍历的方式。

THAT'S ALL;

#include 
using namespace std;
typedef long long LL;

const int N=1e3+10;

struct BST{
	BST* Left;
	BST* Right;
	int w;
};

BST* Insert1(BST* p,int w)
{
	if(p==NULL)
	{
		p=(BST*)malloc(sizeof(BST));
		p->w=w;
		p->Left=NULL;
		p->Right=NULL;
		return p;
	}
	if(w>=p->w)
		p->Right=Insert1(p->Right,w);
	else
		p->Left=Insert1(p->Left,w);
	return p;
}

BST* Insert2(BST* p,int w)
{
	if(p==NULL)
	{
		p=(BST*)malloc(sizeof(BST));
		p->w=w;
		p->Left=NULL;
		p->Right=NULL;
		return p;
	}
	if(ww)
		p->Right=Insert2(p->Right,w);
	else
		p->Left=Insert2(p->Left,w);
	return p;
}

vectorxs;
void Preorder(BST* p)
{
	if(p==NULL) return;
	xs.push_back(p->w);
	Preorder(p->Left);
	Preorder(p->Right);
}


void Postorder(BST* p)
{
	if(p==NULL) return;
	Postorder(p->Left);
	Postorder(p->Right);
	xs.push_back(p->w);
}

int main()
{
	int n;
	int a[N];
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%d",&a[i]);
	bool f1=true,f2=true;
	BST* root;
	root=(BST*)malloc(sizeof(BST));
	root->w=a[1];
	root->Left=NULL;
	root->Right=NULL;
	for(int i=2;i<=n;i++)
		Insert1(root,a[i]);
	xs.clear();
	Preorder(root);
	for(int i=0;iw=a[1];
		root->Left=NULL;
		root->Right=NULL;
		for(int i=2;i<=n;i++)
			Insert2(root,a[i]);
		xs.clear();
		Preorder(root);
		for(int i=0;i


你可能感兴趣的:(数据结构,BST)