剑指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

智能推荐

rtklib的manual解读_rtklib中文说明书-程序员宅基地

文章浏览阅读5.1k次,点赞14次,收藏69次。转自:RTKLib的Manual解读-耀礼士多德 Key-word:integer ambiguity resolution :整周模糊度解算  navigation:导航  Kinematic:动态,RTK的K  rover:漫游  validation:验证  antena:天线  phase:相位  Augmentation:曾广  carrier-base:基于载波..._rtklib中文说明书

电力英语和计算机考试难吗,四六级、计算机这些证书真的影响进电网吗?-程序员宅基地

文章浏览阅读1k次。每年都会有小伙伴纠结没有四六级和计算机会不会在网申的时候刷下来?其实只要你想报考的省市单位的公告上没有说这些要求,那网申的时候,即使没有也没有关系哦!小思为大家总结了20年一批证书要求的数据:01四级证书大家可以看到冀北电力和天津电力都有一个四级优先和四六级优先,这个是什么意思呢?首先这里的四级的大学英语四级考试即CET-4,College English Test Band 4的缩写,是由国家教..._电力英语和计算机考试难吗

算术编码(多媒体实验一)_算术编码 多媒体 p-程序员宅基地

文章浏览阅读2k次,点赞3次,收藏37次。算术编码(xdu多媒体实验一)前言详细原理源代码前言关于本文的一些联想:我曾读到大刘(可能是)的一本短片科幻小说集,其中有一个故事说的与算术编码有关,但当时我并不清楚其原理,非常震惊。类似居然有人提问过:如果有个飞船,在某处画个点,就能解码出一套百科全书,真的可能么?。故事讲述的是一个外星人来到地球,然后获取了地球的所有知识,包括地球的历史,科技,自然风光等等记录。然后他们带回去的时候只是在飞船上刻了一个记号,这个记号的精度非常之高,其中承载的信息就是整个地球知识的信息熵。等到他们回去只需要测量_算术编码 多媒体 p

docker 创建容器 运行时报错 Unrecognized option: --restart=always_docker 镜像启动unrecognized option: -server-程序员宅基地

文章浏览阅读2.3k次。docker 安装 jenkins创建 jenkins 容器docker run --name jenkins -p 8080:8080 -p 50000:50000 -d -v /usr/local/docker/jenkins_home:/var/jenkins_home jenkins/jenkins:lts --restart=always容器创建成功,但是运行失败docker logs [id] 查看原因[root@docker]# docker ps -aCONTAI_docker 镜像启动unrecognized option: -server

Android Spinner控件之键值对用法-程序员宅基地

文章浏览阅读129次。一、字典表,用来存放键值对信息package com.ljq.activity;import java.io.Serializable;@SuppressWarnings("serial")public class Dict implements Serializable { private Integer id; private S..._安卓 spinner 键值

ArcGIS API for JavaScript 4.9学习笔记一(创建2D/3D地图)_esri/views/mapview字体设置-程序员宅基地

文章浏览阅读805次。ArcGIS API for JavaScript 4.9学习笔记一(创建2D/3D地图)2D:代码:<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="initial-scale=1, maximum-scale_esri/views/mapview字体设置

随便推点

【开发工具】Arthas使用笔记:1、下载和简单使用_current vm java version: 1.8 do not match target v-程序员宅基地

文章浏览阅读1.1w次,点赞2次,收藏6次。本文参考官方文档:https://alibaba.github.io/arthas/install-detail.html如有问题可加入上述文档中的官方QQ/钉钉群一、安装(windows)1、开发命令框,切换到准备安装的目录,D:/cloudcore/open_tools/arthas2、复制下面命令,完成一键安装,并且在该目录下会生成一个as.sh文件curl -L ht..._current vm java version: 1.8 do not match target vm java version: 17, attach

linux添加环境变量的方法总结_linux怎么把imagemagick的/usr/bin/convert加入到环境变量中-程序员宅基地

文章浏览阅读1.3w次,点赞10次,收藏13次。linux对环境变量有无双引号、或者变量用不用{}括起来并不敏感,小小的看了下profile文件,似乎系统如果发现变量没有引号,会自动加上。 但变量前必须加$符号 有以下三种添加环境变量的方法 1、直接使用export命令: 比如:export PATH=$PATH:/home/lm/apache-jena-2.7.4/binexport CLASSPATH=.:/home/liaomen_linux怎么把imagemagick的/usr/bin/convert加入到环境变量中

jquery mobile页面跳转后,JS无效的原因及解决方案-程序员宅基地

文章浏览阅读106次。最近在做个项目,用到jquery mobile,很陌生对他,问题一个个的来,那就要一个个解决,找了一天这个问题,放可明白:首先明白jqm里面页面跳转默认都是通过ajax请求的,必须重新刷新页面js方可有效,也就是js没有起作用,并不是js本身的问题,下面说说解决方法:在使用jQuery Mobile进行Web开发中,当页面跳转时(pageA => pageB),在pageB中引用的JS并未成..._jquery mobile页面跳转后样式丢失js失效的解决方法

黑苹果必备技能之一:升级OC(open core)引导_使用open core不能更新到最新版-程序员宅基地

文章浏览阅读2.2w次,点赞8次,收藏34次。目前来说,安装黑苹果的用户大部分应该都是采用的clover以及OC引导,目前由于OC引导的不断完善以及配置方法更简单,有不少用户都已经从clover引导转变到了OC引导,而关于使用OC引导安装黑苹果的教程大家可以去参考之前发布的文章,此篇文章只讲解如何去升级OC引导,目前我所使用的的OC0.6.4引导,由于我之前使用0.6.3进行升级之前并没有进行照片备份,但是升级方法很简单,相对于0.6.3,0.6.4并没有太大的升级,具体后面会讲。进行OC下载首先需要打开GitHub官网(www.github.c_使用open core不能更新到最新版

工作遇到问题记录_handle exception logger notfiy sleep...-程序员宅基地

文章浏览阅读161次。1.scp -P 22(端口) [email protected]:/home/文件路径2.找到指定的进程id并且将它kill掉https://blog.csdn.net/shenhuan1104/article/details/75808146,ps -ef | grep (此处进程名字)| grep -v grep | cut -c 9-15 | xargs kil..._handle exception logger notfiy sleep...

SAP是ECC6.0但是不确定是EHP6还是EHP7,怎么看_sap ecc6 怎么看ehp版本-程序员宅基地

文章浏览阅读7.7k次。在“系统状态”中查看“软件组件”SAP_APPL,如果“释放”(版本)是606,就是EHP6,如果是617开头的,就是EHP7。参考,有图:https://zhidao.baidu.com/question/583382872910792365.html_sap ecc6 怎么看ehp版本

推荐文章

热门文章

相关标签