《算法筆記》9.4小節——數據結構專題(2)->二叉查找樹(BST)->問題 A: 二叉排序樹

問題 A: 二叉排序樹

時間限制: 1 Sec  內存限制: 32 MB
提交: 519  解決: 225
[提交][狀態][討論版][命題人:外部導入]

題目描述

輸入一系列整數,建立二叉排序數,並進行前序,中序,後序遍歷。

輸入

輸入第一行包括一個整數n(1<=n<=100)。接下來的一行包括n個整數。

輸出

可能有多組測試數據,對於每組數據,將題目所給數據建立一個二叉排序樹,並對二叉排序樹進行前序、中序和後序遍歷。每種遍歷結果輸出一行。每行最後一個數據之後有一個空格。

樣例輸入

1
2 
2
8 15 
4
21 10 5 39 

樣例輸出

2 
2 
2 
8 15 
8 15 
15 8 
21 10 5 39 
5 10 21 39 
5 10 39 21 

[提交][狀態]

#include<iostream>
using namespace std;
struct node{
	int data;
	node *lchild;
	node *rchild;
};

node *newNode(int v){
	node *root=new node;
	root->data=v;
	root->lchild=root->rchild=NULL;
	return root;
}

void insert(node *&root,int x){
	if(root==NULL){
		root=newNode(x);
		return;
	}
	if(x==root->data){
		return;
	}else if(x<root->data){
		insert(root->lchild,x);
	}else{
		insert(root->rchild,x);
	}
}

node *create(int data[],int n){
	node *root=NULL;
	for(int i=0;i<n;i++){
		insert(root,data[i]);
	}
	return root;
}

void preOrder(node *root){
	if(root!=NULL){
		cout<<root->data<<" ";
		preOrder(root->lchild);
		preOrder(root->rchild);
	}
}
void inOrder(node *root){
	if(root!=NULL){
		inOrder(root->lchild);
		cout<<root->data<<" ";
		inOrder(root->rchild);
	}
}
void postOrder(node *root){
	if(root!=NULL){
		postOrder(root->lchild);
		postOrder(root->rchild);
		cout<<root->data<<" ";
	}
}

int main(){
	int n;
	while(cin>>n){
		int a[n];
		for(int i=0;i<n;i++){
			cin>>a[i];
		}
		node *NEW=create(a,n);
		preOrder(NEW);
		cout<<endl;

		inOrder(NEW);
		cout<<endl;

		postOrder(NEW);
		cout<<endl;
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章