作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

题目描述:

输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。如下图所示

数据范围:输入二叉树的节点数0≤n≤1000,二叉树中每个节点的值0≤val≤1000
要求:空间复杂度O(1)(即在原树上操作),时间复杂度 O(n)

注意:

1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继

2.返回链表中的第一个节点的指针

3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构

4.你不用输出双向链表,程序会根据你的返回值自动打印输出

示例:

输入:

{10,6,14,4,8,12,16}

返回值:

From left to right are:4,6,8,10,12,14,16;From right to left are:16,14,12,10,8,6,4;

说明:

输入题面图中二叉树,输出的时候将双向链表的头节点返回即可。

解题思路:

本题考察数据结构树的使用。运用中序遍历将二叉树的节点存放在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==nullptr)return pRootOfTree;stack<TreeNode*> s;vector<TreeNode*> v;auto a=pRootOfTree;// 中序遍历while(!(s.empty()&&a==nullptr)){while(a!=nullptr){s.push(a);a=a->left;}if(!s.empty()){a=s.top();s.pop();v.push_back(a);a=a->right;}}// 双向链表建立v.front()->left=nullptr;v.back()->right=nullptr;int size=v.size();for(int i=0;i<size-1;++i){v[i]->right=v[i+1];v[i+1]->left=v[i];}return v.front();}
};

剑指offer(C++)-JZ36:二叉搜索树与双向链表(数据结构-树)相关推荐

  1. 剑指offer 27: 二叉搜索树与双向链表

    题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. 解题思路 递归调用左子树: 把原左节点的指针调整为指向链表中指向前一个节点 ...

  2. 二叉搜索时与双向链表python_【剑指offer】26 二叉搜索树与双向链表

    - 题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建任何新的结点,只能调整树中结点指针的指向. - 解题思路 递归 - Java实现 /**public class ...

  3. 【LeetCode】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先

    [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 一.迭代 二.递归 祖先的定义 ...

  4. 剑指 Offer II 055. 二叉搜索树迭代器

    链接:剑指 Offer II 055. 二叉搜索树迭代器 题解: /*** Definition for a binary tree node.* struct TreeNode {* int val ...

  5. 《剑指Offer》51. 二叉搜索树的第k个结点

    题目:51. 二叉搜索树的第k个结点 知识点:二叉搜索树 题目描述: 给定一棵二叉搜索树,请找出其中的第k小的结点.例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为 ...

  6. 剑指offer 24:二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 二叉搜索数的定义:左节点比根节点小,右节 ...

  7. 剑指OFFER之从二叉搜索树的后序遍历序列(九度OJ1367)

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 输入: 每个测试案例包括2行: 第一行为1个整数 ...

  8. 【剑指offer】_09二叉搜索树的后序遍历序列

    题目描述 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路 比如下面的这棵二叉搜索树 它的后序遍历为 ...

  9. 【LeetCode笔记】剑指 Offer 68 - I. 二叉搜索树的最近公共祖先(Java、二叉树、dfs)

    文章目录 思路 & 代码 代码 & 思路 二刷 思路 & 代码 应该在二叉树的最近公共祖先之前写= = 需要用到二叉搜索树的特性- 代码 & 思路 分成四种情况即可,具 ...

最新文章

  1. 大连二本的学计算机专业的大学,高考成绩差:这9所“二本大学”的计算机专业不错!值得报考!...
  2. Windows服务器SYSTEM权限Webshell无法添加3389账户情况突破总结
  3. 工程实战-ES6环境配置
  4. mysql 备库 hang住_mysql主键的缺少导致备库hang住
  5. 1005. 继续(3n+1)猜想 (25)
  6. [Jarvis OJ - PWN]——[XMAN]level1
  7. LeetCode 1615. 最大网络秩(出入度)
  8. ida 字符串查找_IDA 搜索中文字符串
  9. C++/OpenGL:图像指针操作
  10. h5页面在ios机上禁止长按复制
  11. 利用oc门或od门实现线与_OC和OD门、线与和线或
  12. winrar去弹窗广告激活办法!!
  13. Mybatis中取 Oracle自增序列 重复值
  14. 2014网络红人彭伟个人资料及照片
  15. 「免费 | 重磅」9月19日首届智能决策论坛即将开幕!(附带10+位作者演讲主题及摘要)「中国科学院自动化研究所」...
  16. 三条中线分的六个三角形_为什么三角形的三条中线把三角形分为面积相等的六块...
  17. SCI文章下载、选刊、分区查询—起飞站
  18. 10.26 node.js day01
  19. 全国青少年软件编程(Scratch)一级2019考试测试卷最后一道编程题!
  20. linux 蓝牙发送文件,如何在Ubuntu上使用蓝牙进行文件传输

热门文章

  1. LVS-DR模型实现调度
  2. LNMP一键自动安装脚本
  3. 全栈溯源、mAPM、金融性能、Oracle VS. MySQL:看APM技术专场有哪些干货
  4. Android学习--10-数据存储
  5. Bootstrap文件上传插件File Input的使用
  6. Freemarker输出$和html标签等特殊符号
  7. knockout.js的简介和简单使用
  8. 计算机毕业设计中Python Django 框架目录结构简介
  9. python人工智能算法代码_python人工智能,分类例解
  10. c语言线程池源代码下载,C语言实现线程池(示例代码)