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

1.把二元查找树转变成排序的双向链表

时间:2014-05-22 05:30:47      阅读:207      评论:0      收藏:0      [点我收藏+]

标签:style   blog   class   c   code   java   

题目:输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。要求不能创建任何新的结点,只调整指针的指向。

比如将二元查找树 。

10

/ \

6 14

/ \ / \

4 8 12 16

转换成双向链表

4=6=8=10=12=14=16。

 

代码如下:

bubuko.com,布布扣
///////////////////////////////////////////////////////////////////////
// Covert a sub binary-search-tree into a sorted double-linked list
// Input: pNode -           the head of the sub tree
//        pLastNodeInList - the tail of the double-linked list
///////////////////////////////////////////////////////////////////////
void ConvertNode(BSTreeNode* pNode, BSTreeNode*& pLastNodeInList)
{
    if(pNode == NULL)
        return;

    BSTreeNode *pCurrent = pNode;

    // Convert the left sub-tree
    if (pCurrent->m_pLeft != NULL)
        ConvertNode(pCurrent->m_pLeft, pLastNodeInList);

    // Put the current node into the double-linked list
    pCurrent->m_pLeft = pLastNodeInList; 
    if(pLastNodeInList != NULL)
        pLastNodeInList->m_pRight = pCurrent;

    // Update the last node in list
    pLastNodeInList = pCurrent;

    // Convert the right sub-tree
    if (pCurrent->m_pRight != NULL)
        ConvertNode(pCurrent->m_pRight, pLastNodeInList);
}

///////////////////////////////////////////////////////////////////////
// Covert a binary search tree into a sorted double-linked list
// Input: pHeadOfTree - the head of tree
// Output: the head of sorted double-linked list
///////////////////////////////////////////////////////////////////////
BSTreeNode* Convert_Solution1(BSTreeNode* pHeadOfTree)
{
    BSTreeNode *pLastNodeInList = NULL;
    ConvertNode(pHeadOfTree, pLastNodeInList);
    if (pLastNodeInList !=NULL)
        pLastNodeInList->m_pRight = NULL;

    // Get the head of the double-linked list
    BSTreeNode *pHeadOfList = pLastNodeInList;
    while(pHeadOfList && pHeadOfList->m_pLeft)
        pHeadOfList = pHeadOfList->m_pLeft;

    return pHeadOfList;
}
bubuko.com,布布扣

参考:

http://blog.csdn.net/yysdsyl/article/details/1841632

http://www.cnblogs.com/wolenski/archive/2012/07/08/2581859.html

1.把二元查找树转变成排序的双向链表,布布扣,bubuko.com

1.把二元查找树转变成排序的双向链表

标签:style   blog   class   c   code   java   

原文地址:http://www.cnblogs.com/hellogiser/p/3738178.html

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