首页 > 其他 > 详细

剑指offer25-二叉搜索树与双向链表

时间:2020-05-27 00:50:23      阅读:38      评论:0      收藏:0      [点我收藏+]

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

思路:中序遍历二叉搜索树递归与非递归方式

    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        //中序遍历
        //left指向前一个节点,right指向后一个节点
        //非递归
        if(pRootOfTree==NULL) return pRootOfTree;
        TreeNode*p,*pre,*proot;
        stack<TreeNode*>st;
        bool flag=false;
        p=pRootOfTree;
        do{
            while(p!=NULL)
            {
                st.push(p);
                p=p->left;
            }
            if(!st.empty())
            {
                p=st.top();
                if(pre!=NULL)
                {
                    p->left=pre;
                    pre->right=p;
                }
                pre=p;
                if(!flag)
                {
                    proot=p;
                    flag=true;
                }
                st.pop();
                //if(p->right!=NULL)
                p=p->right;
            }
        }while(p!=NULL||!st.empty());
            return proot;
    }

//递归

    TreeNode* Convert(TreeNode* pRootOfTree)
    {

       if(pRootOfTree==NULL)return NULL;
        TreeNode*pre=NULL,*p=pRootOfTree;
        ConvertHelper(pRootOfTree,pre);
        while(p->left!=NULL)
        {
            p=p->left;
        }
        return p;
    }
    void ConvertHelper(TreeNode* root,TreeNode*&pre)
    {
        if(root==NULL)return;
        ConvertHelper(root->left,pre);
        root->left=pre;
        if(pre)pre->right=root;
        pre=root;
        ConvertHelper(root->right,pre);
    }

 

剑指offer25-二叉搜索树与双向链表

原文:https://www.cnblogs.com/trouble-easy/p/12969675.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!