首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

二叉排序树的生成,该如何处理

2012-04-05 
二叉排序树的生成//二叉排序树插入voidinsertbst(BTLR*bt,BTLR*p){if(btNULL)btpelse{if(p- data bt

二叉排序树的生成
//二叉排序树插入
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 的插入位置了。

热点排行