二叉搜索树与双向链表

发布时间:2020-07-20 17:12:06 作者:qdqade
来源:网络 阅读:248

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


二叉搜索树的中序遍历即是有序的,中序遍历同时转变即可,

转换左子树,左子树最右边,为左子树有序的最后一个节点为lastnode,

root->left=lastnode

如果lastnode非空,lastnode->right=root;

右树非空,转换之。


最后,原根节点指向的是序列中间,需要返回链表头,可以往前遍历即可。


 void ConvertCore(TreeNode *root,TreeNode *&lastnode){

        if(root==NULL)

            return;

        

        if(root->left)

            ConvertCore(root->left,lastnode);

        

        root->left=lastnode;

        if(lastnode!=NULL)

            lastnode->right=root;

        lastnode=root;

        

        if(root->right)

        ConvertCore(root->right,lastnode);

    }

    TreeNode* Convert(TreeNode* pRootOfTree)

    {

        if(pRootOfTree==NULL)

            return NULL;

        TreeNode *lastnode=NULL;

        ConvertCore(pRootOfTree,lastnode);

        

        while(lastnode->left){

            lastnode=lastnode->left;

        }

        return lastnode;

    }


推荐阅读:
  1. C++二叉搜索树与双向链表(剑指Offer精简版)
  2. 剑指offer:二叉搜索树与双向链表

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

二叉搜索树与双向链表 二叉搜

上一篇:ASP.NET Web API Model-ParameterBinding

下一篇:Java如何实现集合遍历及泛型通配

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》