您的位置:首页 > 其它

二叉搜索树转换成一个排序的双向链表

2017-07-02 22:33 281 查看
题目:

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。

class Solution {

public:

     //Paragrm 当前的根节点,已经处理好的双向链表的尾部节点

   //传引用和传值的区别

   //周五  2017-7-2

   //中序遍历

    void convertNode(TreeNode *pRootOfTree,TreeNode *&lastNode)

    {

        if(pRootOfTree==NULL) return ;

        

        if(pRootOfTree->left) 

            convertNode(pRootOfTree->left,lastNode);

        //当前节点的前驱指向已经处理好的双向链表的尾

        pRootOfTree->left=lastNode;

        if(lastNode)

            lastNode->right=pRootOfTree;

        

        lastNode=pRootOfTree;

        

        if(pRootOfTree->right)

            convertNode(pRootOfTree->right,lastNode);

        

    }

    

    TreeNode* Convert(TreeNode* pRootOfTree)

    {

        //2017-6-27 周二

        /*二差搜索树

        1,左子树节点的值小于根节点

        2 右子树的节点的值大于根节点

        3 没有键值值相等的节点

        4 左右子树也是二叉查找树

        */

        //

        //思路:

        //用于保存处理过程中的双向链表的尾节点

        TreeNode *lastNode=NULL;

        convertNode(pRootOfTree,lastNode);

        

        //找到双向链表的头结点

        TreeNode *pHead=lastNode;

        while(pHead&&pHead->left)

            pHead=pHead->left;

        return pHead;

        

        

    }

 

};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐