创建一个二叉搜索树(非递归)
struct Treenode {
int data;
Treenode *left;
Treenode *right;
};
Treenode *Creattree(int a[],int n){//创建二叉搜索树
Treenode *root=NULL;
for(int i=0;i<n;i++){
Treenode *p=root,*q,*ins;//p指向子节点,q指向父节点
ins=(Treenode*)malloc(sizeof(Treenode));
ins->data=a[i];
ins->left=ins->right=NULL;
if(!p){
root=ins;
continue;
}
while(p){//找到要插入的父节点
q=p;
if(a[i]<p->data)
p=p->left;
else
p=p->right;
}
if(a[i]<q->data)//插入结点
q->left=ins;
else
q->right=ins;
}
return root;
}
创建一个二叉搜索树(递归)
Treenode *find(Treenode *root,int a){
if((a<root->data?root->left:root->right)==NULL) //若要插入左(或右)子树,而左(或右)子树为空,则返回本节点
return root;
else //若要插入左(或右)子树,而左(或右)子树不为空,递归
return find(a<root->data?root->left:root->right,a);
}
Treenode *Creattree(int a[],int n){//创建二叉搜索树
Treenode *root=NULL;
for(int i=0;i<n;i++){
Treenode *ins,*p;//p指向要插入的父节点
ins=(Treenode*)malloc(sizeof(Treenode));
ins->data=a[i];
ins->left=ins->right=NULL;
if(!root){
root=ins;
continue;
}
p=find(root,a[i]);//找父节点
if(a[i]<p->data)//插入结点
p->left=ins;
else
p->right=ins;
}
return root;
}