博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉搜索树转双向链表
阅读量:4968 次
发布时间:2019-06-12

本文共 1452 字,大约阅读时间需要 4 分钟。

直接通过中序遍历来解。但是需要设置两个节点记录每个子树排序后的第一和最后一个节点,尤其是最后一个,因为最后一个节点是由于连接所需。

上代码:

class Solution {public:       TreeNode* Convert(TreeNode* pRootOfTree)    {        TreeNode* head=NULL;//每个子树排序后的第一个节点        TreeNode* tail=NULL;//每个子树排序后的最后一个节点        ConvertHelp(pRootOfTree,head,tail);        return head;    } void ConvertHelp(TreeNode* pRootOfTree,TreeNode* &head,TreeNode* &tail) {     if(pRootOfTree==NULL) return;     ConvertHelp(pRootOfTree->left,head,tail);     if (tail == NULL) {
//说明找到了中序遍历的第一个节点,把其作为链表头节点 tail = pRootOfTree; head = pRootOfTree; } else { tail->right = pRootOfTree; pRootOfTree->left = tail; tail = pRootOfTree; } ConvertHelp(pRootOfTree->right,head,tail); }};

法二:(思路同上,但是更简洁)

class Solution {public:    TreeNode* Convert(TreeNode* pRootOfTree)    {        if(pRootOfTree == nullptr) return nullptr;        TreeNode* pre = nullptr;                 convertHelper(pRootOfTree, pre);                 TreeNode* res = pRootOfTree;        while(res ->left)            res = res ->left;        return res;    }         void convertHelper(TreeNode* cur, TreeNode*& pre)    {        if(cur == nullptr) return;                 convertHelper(cur ->left, pre);                 cur ->left = pre;        if(pre) pre ->right = cur;        pre = cur;                 convertHelper(cur ->right, pre);                               }};

 

转载于:https://www.cnblogs.com/inception6-lxc/p/9276684.html

你可能感兴趣的文章
JRebel安装部署,激活
查看>>
OPENSSL使用方法
查看>>
下载GO的开源开发工具LITEIDE
查看>>
接口操作XML
查看>>
idhttp访问DATASNAP有密码验证的中间件
查看>>
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
DELPHI开发LINUX包
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(3)——webpack基础
查看>>
前端利器躬行记(4)——webpack进阶
查看>>
前端利器躬行记(5)——Git
查看>>