码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 寻找二叉树一个节点的后继节点


    后继节点:中序遍历的后一个节点

    普通二叉树:中序遍历得到一个list,时间复杂度O(n)

    本题的二叉树:有父节点的指针,后继节点与原节点的距离为1,因此可以直接通过父节点找到下一个节点

    优化:节点到另一个节点的真实距离为k,时间复杂度为O(k)

    情况分析:

    情况一:节点node有右子树,后继节点为右子树上的最左节点

    情况二:节点node无右子树,沿着node向上找第一个作为左孩子的祖先,左孩子的父节点就是node的后继节点(因为此时节点node为节点Y左子树最右侧的节点)

            对于情况二,在找到节点Y之后,节点Y即为node的后继节点,节点Y有没有右子树不重要

    情况三:节点node本身为整颗二叉树最右的节点,没有后继节点,返回null

               

    1. package binarytree;
    2. public class SuccessorNode {
    3. public class Node {
    4. int value;
    5. Node left;
    6. Node right;
    7. Node father;//这里定头节点的father节点为null,在创建二叉树时需要注意
    8. public Node(int data) {
    9. this.value = data;
    10. }
    11. }
    12. public Node getsuccessorNode(Node node) {
    13. if (node == null) {
    14. return node;
    15. }
    16. if (node.right != null) {//节点node有右子树
    17. while (node.left != null) {//找到最左的节点
    18. node = node.left;
    19. }
    20. return node;//返回右子树的最左节点
    21. } else {//没有右子树,向上找
    22. //node不为父节点的左孩子 并且 node的父节点不为null 则向上找
    23. while (node != node.father.left && node.father != null) {
    24. node = node.father;//此时为第一个不为右孩子的节点;此时为第一个为左孩子的节点
    25. }
    26. node = node.father;
    27. //如果node不是整颗二叉树的最右的节点,返回左孩子的父节点
    28. //如果node是整颗二叉树的最右的节点,node一直找到头节点,头节点的father为null,返回null
    29. return node;
    30. }
    31. }
    32. }

     

  • 相关阅读:
    在鲲鹏服务器搭建k8s高可用集群分享
    在阿里6年晋升3次,终获P8岗位,全靠这份PDF(Android研发岗)
    在 EMR Serverless 上使用 Delta Lake
    使用 Lua 脚本和海康 VisionMaster 进行 TCP 通信
    【DC-DC】AP9180 内置 MOS 管升压型恒流驱动芯片
    Docker的3主3从redis集群配置(扩容和缩容配置)
    解决mybatis用Map返回的字段全变大写的问题
    EasyPOI处理excel、CSV导入导出
    npm版本升级报错
    数据挖掘与------跨行业数据挖掘标准流程:CRISP-DM
  • 原文地址:https://blog.csdn.net/m0_73530538/article/details/133995769
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号