特点:
1)左子树非空则左子树所有节点的值小于根节点
2)右子树非空则右子树所有节点的值大于根节点
3)左右子树都为二叉排序树
查找次数等于树高,最坏情况为o(n),最好为o(log n)
以中序遍历输出则为有序序列,也可以称为树排序,排序复杂度o(n*log n)
# include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
typedef int datatype;
struct bsnode
{
datatype data;
bsnode *l,*r;
bsnode(){l=r=NULL;}
};
bsnode* Insert(bsnode *t,datatype x)
{
bsnode *p=t,*f=NULL;//f为表示下一个点的父节点
while(p)
{
if(p->data==x) return t ; //若该值已在树中出现,就不必再插入
f=p;
if(x<p->data) p=p->l; //比根小就往左边走
else p=p->r;//否则往右边
}
p