二叉排序树的生成
//二叉排序树插入
void insertbst (BTLR *bt,BTLR *p)
{
if(bt==NULL)
bt=p;
else
{
if(p-> data <bt-> data)
inserbst(bt-> lchild,p);
else
inserbst(bt-> rchild,p);
}
}
//生成二叉排序树
void createbst(BTLR *bt,int n)
{
int i,k;
BTLR *p;
bt=NULL;
for(i=1;i <=n;i++)
{
scanf(“%d”,k);
p=(BTLR*)malloc(sizeof(BTLR));
p-> data=k;
p-> lchild=NULL;
p-> rchild=NULL;
insertbst(bt,p);
}
}
按照上面的算法,由序列(20,18,7,32,15,68,70,6,30)生成的二叉排序树为什么会是这样?
20
18 32
7 30 68
6 15 70
[解决办法]
從根節點開始查詢
小于節點,插到左子樹,否則插到右子樹
依次類推。直至合適的位置。
[解决办法]
其中第四步插入32时,32为什么就成了20的右子树,而不是成为18的右子树呢??
===============
它是从根节点开始插入的。
从根节点 20 开始判断, 比它大的插入到 右子树,比它小的插入到 左子树。
显然 32 比20大,插入到右子树。
由于 20 右子树为空,那么 20 的右孩子节点就是 32 的插入位置了。