码迷,mamicode.com
首页 > 其他好文 > 详细

链式二叉搜索树#插入节点#

时间:2015-04-06 15:41:10      阅读:161      评论:0      收藏:0      [点我收藏+]

标签:

定义一个二叉树节点的数据结构如下:

typedef struct TREE_NODE
{
    TREE_TYPE value;
    struct TREE_NODE *pLeft;
    struct TREE_NODE *pRight;
}TreeNode;

插入节点的原型为:void insert(TreeNode **pLink,TREE_TYPE data);

 如果要将数组元素a[10]={20,12,25,5,16,28,2,17,26,29};

下面分两种情况讨论:

①    :当二叉搜索树为空时。例如插入20节点。如下图所示:

技术分享

②    :当二叉树不为空时,找到插入节点的位置,例如5节点

技术分享

while((pCurrent=*pLink) != NULL)

    {

          if(data<pCurrent->value)

          {

              pLink = &(pCurrent->pLeft);

          }

          else

          {

              pLink = &(pCurrent->pRight);

          }

}

细说这段代码:首先,pCurrent为一个节点指针,指向20这个节点。

判断5<20,执行:pLink = &(pCurrent->pLeft);pLink中保存的是20节点中指向左孩子指针的指针,然后执行while((pCurrent=*pLink) != NULL),此时pCurrent指向12节点,pLink为指向12节点指针的指针。

判断5<12, 执行:pLink = &(pCurrent->pLeft); pLink中保存的是12节点中指向左孩子指针的指针,然后执行while((pCurrent=*pLink) != NULL) ,此时pCurrent为NULL,退出while循环。

此时,pLink指向12节点中指向左孩子指针的指针。因此只需修改 (*pLink) ,即可将节点5插入。注意此时的*pLink==pCurrent;因此pCurrent为空闲指针,可将pCurrent指针指向新分配的节点块。

综合①②:列出源代码

void insert(TreeNode **pLink,TREE_TYPE data)

{

    TreeNode *pCurrent = NULL;

    while((pCurrent=*pLink) != NULL)

    {

          if(data<pCurrent->value)

          {

              pLink = &(pCurrent->pLeft);

          }

          else

          {

              pLink = &(pCurrent->pRight);

          }

    }

     pCurrent = (TreeNode *)malloc(sizeof(TreeNode));

    pCurrent->value = data;

    pCurrent->pLeft = NULL; pCurrent->pRight = NULL;

 

    *pLink = pCurrent ; 

}

 

链式二叉搜索树#插入节点#

标签:

原文地址:http://www.cnblogs.com/lalalala/p/4395933.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!