关于二叉排序树的建立(递归与非递归)
关于建立二叉排序树(BST)
#include<bits/stdc++.h>
using namespace std ;
typedef struct Bi_Node{
int data ;
Bi_Node *lchild , *rchild ;
}Bi_Node ,*Bi_Tree;
void Find(Bi_Tree &T,int x ){//递归建立二叉排序树
if(!T){
T = (Bi_Tree)malloc(sizeof(Bi_Node));
T->data = x ;
T->rchild = T->lchild = NULL ;
}else if(T->data > x ){
Find(T->lchild, x);
}else if(T->data < x ){
Find(T->rchild, x);
}else return ;
}
void Create_BST1(Bi_Tree &T , int key[], int n ){
T = NULL ;
for(int i = 0 ;i< n ;i ++ ){
Find(T , key[i]);
}
}
void Create_BST2(Bi_Tree &T , int key[] , int n ){
Bi_Tree p , q ;//p用来找,q用来指明插入位置(插入左边还是右边)
T = NULL ;
for(int i = 0 ;i< n ;i++ ){
p = T ;
q = NULL ;
while (p){
if(p->data > key[i]){
q = p ;
p = p->lchild;
}else if(p->data < key[i]){
q = p ;
p = p->rchild;
}else break ;
}
if(!p){//p为空,也就是在排序树中不存在要插入的数据
Bi_Tree r = (Bi_Tree)malloc(sizeof(Bi_Node));
r->data = key[i] ;
r->lchild = r->rchild = NULL ;
if(!q){//要插入根节点
T = r ;
}else if(q->data> key[i]){//插入左边
q->lchild = r ;
}else q->rchild = r ;//插入右边
}
}
}
int main (){
return 0 ;
}
//例子自己去举吧
如有问题,欢迎指正!