码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【剑指Offer】36.二叉搜索树与双向链表


    题目

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

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

    注意:

    1.要求不能创建任何新的结点,只能调整树中结点指针的指向。当转化完成以后,树中节点的左指针需要指向前驱,树中节点的右指针需要指向后继
    2.返回链表中的第一个节点的指针
    3.函数返回的TreeNode,有左右指针,其实可以看成一个双向链表的数据结构

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

    输入描述:

    二叉树的根节点

    返回值描述:

    双向链表的其中一个头节点。

    示例1

    输入:{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;

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

    示例2

    输入:{5,4,#,3,#,2,#,1}

    返回值:From left to right are:1,2,3,4,5;From right to left are:5,4,3,2,1;

    说明:

                        5
                      /
                    4
                  /
                3
              /
            2
          /
        1
    树的形状如上图

    解答

    源代码

    1. import java.util.*;
    2. /**
    3. public class TreeNode {
    4. int val = 0;
    5. TreeNode left = null;
    6. TreeNode right = null;
    7. public TreeNode(int val) {
    8. this.val = val;
    9. }
    10. }
    11. */
    12. public class Solution {
    13. public TreeNode pre = null;
    14. public TreeNode head = null;
    15. public TreeNode Convert(TreeNode pRootOfTree) {
    16. if (pRootOfTree == null) {
    17. return null;
    18. }
    19. Convert(pRootOfTree.left);
    20. if (pre == null){
    21. pre = pRootOfTree;
    22. head = pRootOfTree;
    23. } else {
    24. pre.right = pRootOfTree;
    25. pRootOfTree.left = pre;
    26. pre = pRootOfTree;
    27. }
    28. Convert(pRootOfTree.right);
    29. return head;
    30. }
    31. }

    总结

    二叉搜索树按中序遍历就可以得到一个从小到大排列的序列,因此可以通过对二叉树进行中序遍历来得到双向链表。head保存头结点,pre保存上一个结点,连接好当前节点和pre后,将pre设置为当前结点。

  • 相关阅读:
    iPad Pro 2022款将迎来大改款 支持反向无线充电
    java计算机毕业设计排课系统源码+系统+mysql数据库+lw文档
    微信小程序 | 小程序开发
    机器视觉之工业摄像机知识点(二)
    Roson的Qt之旅 #114 QML Repeater(重复器)
    [UE虚幻引擎插件介绍] DTSQLite 插件说明 :蓝图操作SQLite3文件,执行SQL语句。
    输出有价值的性能报告
    Mysql练习题---2级
    GitModel 假设检验下|Task02多元数值向量的假设检验
    【外汇天眼】解析外汇交易平台:深度了解DD与NDD两大模式
  • 原文地址:https://blog.csdn.net/qq_57438473/article/details/133985022
  • 最新文章
  • 沪漂五周年了:我越来越迷茫了
    Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
    MySQL-Seconds_behind_master的精度误差
    [MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
    AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
    Agent OS :五种驯服不确定性的范式
    PortSwigger SQL注入LAB11
    数据库即时编译JIT
    [Begin]AI Learn Data Day 0
    深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号