二叉搜索樹插入簡單模板

Description

Binary search tree: Used for searching. A binary tree where the left child contains only nodes with values less than the parent node, and where the right child only contains nodes with values greater than or equal to the parent.

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<ctime>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int N =1000000;
struct Node 
{
	int key;
	struct Node *parents,*left,*right;
};
struct Node *root,*NIL;
void insert(int k)
{
	struct Node *pre=NIL,*now=root;//前驅節點和當前節點
	struct Node *e;//插入的節點
	e=(Node *)malloc(sizeof(Node));
	e->key=k;
	e->left=NIL;
	e->right=NIL;
	while(now!=NIL){
		pre=now;
		if(e->key<now->key)
			now=now->left;
		else
			now=now->right;
	}
	e->parents=pre;
	if(pre==NIL)//如果前驅爲空,說明是空子樹
	{
		root=e;
	}
	else{
		if(e->key<pre->key){
			pre->left=e;
		}
		else{
			pre->right=e;
		}
	}
	return;
}
void preorder(Node *u){
	if(u==NIL) return;
	printf("%d ",u->key);
	preorder(u->left);
	preorder(u->right);
}
void inorder(Node *u){
	if(u==NIL) return;
	inorder(u->left);
	printf("%d ",u->key);
	inorder(u->right);
}
void print(Node *u)
{
	inorder(u);
	printf("\n");
	preorder(u);
	return;
}
int main()
{
	string cmd;//insert是插入節點,print分別打印中序遍歷和前序遍歷
	int x,n=0;//x爲插入節點,n爲n條命令
	cin>>n;
	rep(i,1,n){
		cin>>cmd;
		if(cmd=="insert")
		{
			cin>>x;
			insert(x);
		}
		else
		{
			print(root);
		}
	}
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章