剑指offer-二叉树搜索与双向链表_剑指offer36二叉树与双向链表-程序员宅基地

技术标签: 剑指offer  二叉树  遍历  搜索  

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

解题思路:二叉树的中序遍历,左、根、右;因为二叉搜索树的中序遍历就是递增排列的,所以只要在中序遍历时将每个结点放入vector中,再分别为每个结点的左右指针赋值即可。
采用中序遍历:
修改中序遍历,在其中加入一个前驱结点
遍历左子树
当前结点指向左指针指向前驱结点
前驱结点右指针指向当前结点
前驱 = 当前
遍历右子树

/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};*/
class Solution {
public:
    TreeNode* Convert(TreeNode* pRootOfTree)
    {
        if(pRootOfTree == NULL) 
            return pRootOfTree;
        pRootOfTree = ConvertNode(pRootOfTree);
        while(pRootOfTree->left) 
            pRootOfTree = pRootOfTree->left;
        return pRootOfTree;
    }

    TreeNode* ConvertNode(TreeNode* root)
    {
        if(root == NULL) 
            return root;
        if(root->left)
        {
            TreeNode *left = ConvertNode(root->left);
            while(left->right) 
                left = left->right;
            left->right = root;
            root->left = left;
        }

        if(root->right)
        {
            TreeNode *right = ConvertNode(root->right);
            while(right->left) 
                right = right->left;
            right->left = root;
            root->right = right;
        }
        return root;
    }
};

二叉树的遍历:
前序遍历:根节点->左子树->右子树
中序遍历:左子树->根节点->右子树
后序遍历:左子树->右子树->根节点

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Dreamhigh_M/article/details/76218853

智能推荐

机械臂编程_建立自己的机械臂-编程-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏26次。机械臂编程 现在,手臂已经组装好了,是时候将其提升到一个新的水平。 现在是释放野兽并完全控制整个机器人手臂的时候了。 在这篇文章的结尾,您应该对如何对该机械臂进行编程以完成您想要的事情有一个想法。 要了解我如何到达这里,请访问我以前的文章,该文章描述了组装过程- 构建自己的机器人手臂-组装 。 你需要什么 再一次,您将需要一些额外的硬件来促进对伺服器的并行控制,并需要使用焊料来组装屏蔽层。..._机械臂编程

在线编辑器 FCKeditor 的应用-程序员宅基地

文章浏览阅读964次。开发环境: Tomcat5.5 Eclipse3.1.1 MyEclipse4.1.1 FCKeditor 版本 FCKeditor_2.2 FCKeditor.Java 2.3 这里需要用到两个包 下载地址: http://www.fckeditor.net/download/default.html 开始: 新建工程,名称为 FCK

ZBar项目简介及安装配置 | 2021SC@SDUSC-程序员宅基地

文章浏览阅读2.3k次,点赞4次,收藏19次。2021SC@SDUSC前言在我们的日常生活中,处处可见条形码和二维码。在以前,我们去逛书店时,或者你现在随手拿起你身边的一本书,你肯定能看到书本的封页后面印有一排黑色线条组成的标签,也就是条形码;你去你们学校图书馆的自助机上借书还书时识别的也是条形码;哦,对了,你还记得每次大型考试答题卡上都会贴上监考老师分发给你的那个标签吗?还是条形码;甚至现在你随随便便逛个超市或便利店,收银员或者自助机也都是通过扫商品条形码给你计价的。条形码在我们的日常生活中真的是随处可见。到了后来,2016年之后,二_zbar

spring cloud笔记 oauth2授权服务 默认tokenService配置源码_oauth tokenservice-程序员宅基地

文章浏览阅读3k次。AuthorizationServerEndpointsConfiguration...private AuthorizationServerEndpointsConfigurer endpoints = new AuthorizationServerEndpointsConfigurer();...//注册工厂@Beanpublic FactoryBean<Authorizat..._oauth tokenservice

Python网络爬虫与信息提取(14)—— 百度搜索关键字爬取并整理摘要、标题、关键字等_爬取百度搜索页的内容python csdn-程序员宅基地

文章浏览阅读4k次。前言百度搜索的内容一般包含标题、摘要、网址、时间信息,本次主要实现根据搜索整理30页左右百度的搜索条例成csv文档。原理百度爬虫比较简单,模拟浏览器访问就可以爬取到所要的数据,访问某个关键字第几页的网址构成为:"http://www.baidu.com/s?wd={}&pn={}".format(urllib.parse.quote(word),number)之后就是解析对应的标签提取信息了。因为要提取关键字,所以解析得到摘要后需要对摘要进行结巴分词,分词后使用停用词表去掉停用词,最后_爬取百度搜索页的内容python csdn

ExtJs6第二弹-- 学会查看ExtJs api文档_extjs6 api-程序员宅基地

文章浏览阅读2.8k次。1、下载api文档 extjs6 pc分为modern和classic两种风格,所以就有两种api文档 所以他们两个的下载地址分别是: extjs6 modern: http://docs.sencha.com/downloads/extjs-docs-6.0.0-modern.zip extjs6 classic: http://docs.sench_extjs6 api

随便推点

SpringBoot整合Activiti7——实战之放假流程(会签)_activit7中会签-程序员宅基地

文章浏览阅读776次,点赞14次,收藏8次。将启动流程后的流程实例ID更换到下面。将启动流程后的流程实例ID更换到下面。_activit7中会签

阿里云服务器收到挖矿病毒的攻击,导致基础的文件被病毒污染的问题和对应的处理解决方法-程序员宅基地

文章浏览阅读556次。情况:1. 阿里云检测到 异地登陆报警:2. 然后进而检测到异常进程, kworker 使CPU 无故跑满3. 收到报警信息后发现 服务器的 22 端口是 默认全网开放的, 修改成指定IP (公司IP) 开放访问4. 我登陆处理,删除该进程之后, 标记已处理此异常5. 发现 过一小时依旧会 重新出现此进程并自己启动, 造成CPU 无故跑满6. 根据阿里云的提示做好删除和更新 后 进行重启...

北京东城区空调维修办法,格力变频空调出现ph,到底是怎么回事?_格力变频空调ph代码-程序员宅基地

文章浏览阅读496次。空调由于是提供给我们人类便利的机器,所以正常的时候,一切都好,如果哪里有异常时候,就会出现各种各样奇怪难懂的代码,对于我们这种常规用户来说,根本看不懂这些代码有代表什么意思,这些代码究竟是什么呢,比如是当您的空调如果出现ph是代表着空调坏了的意思吗?我们常见的空调代码有这些,比如会出现e2、e7这些代码,那这些代码都说明空调某个部位出现了问题,有可能是排风扇有问题了,也有可能是内机出现问题,内机出现流水,或者开机却不运行等等,这些常见的数据都是有一定的指向说明,那ph是什么意思,怎么解读呢?_格力变频空调ph代码

vscode编辑器使用拓展插件background添加背景图片改变外观_background vscode-程序员宅基地

文章浏览阅读1.2k次。如果我们要给vscode添加背景图,改变外观怎么设置?然后我们通过选择文件首选项的设置。,我们在拓展商店里面添加安装。我们可以使用拓展插件。_background vscode

android 简单打电话程序_android拨打电话的程序-程序员宅基地

文章浏览阅读1.4k次。完成android拨打电话程序只需简单几步即可完成。第一步:创建工程,在layout.xml文件中添加 EditText 和Button 控件第二步:在activity中声明控件并初始化(findViewById)第三步:为button添加响应事件 button.setOnclickListener(new View.onClickListener() {});第四步:_android拨打电话的程序

第二届中国(泰州)国际装备高层次人才创新创业大赛_泰州市双创人才计划2022-程序员宅基地

文章浏览阅读135次。为进一步吸引集聚装备制造领域海内外高层次人才来泰创新创业,全力打造海工装备和高技术船舶、汽车零部件和精密制造等特色产业集群_泰州市双创人才计划2022

推荐文章

热门文章

相关标签