剑指offer_二叉树---二叉树的下一节点

简介: 剑指offer_二叉树---二叉树的下一节点

##题目描述

给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。

##解题思路

1,因为是中序遍历,顺序为左—中----右

2,因为考虑下一个节点,所以考察范围可以缩小到中和右

3,如果当前节点有右子树,那么下一个节点就是右子树的最左节点

4,如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点

5,如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点

##代码

/**
 * 
 */
package offerTest;
/**
 * <p>
 * Title:Next
 * </p>
 * <p>
 * Description:
 * </p>
 * 
 * @author 田茂林
 * @data 2017年8月21日 上午10:34:53
 */
class TreeLinkNode {
  int val;
  TreeLinkNode left = null;
  TreeLinkNode right = null;
  TreeLinkNode next = null;
  TreeLinkNode(int val) {
    this.val = val;
  }
}
public class Next {
  public TreeLinkNode GetNext(TreeLinkNode pNode) {
    if (pNode == null) {
      return null;
    }
    // 如果当前节点有右子树
    if (pNode.right != null) {
      TreeLinkNode p = pNode.right;
      while (p.left != null) {
        p = p.left;
      }
      return p;
    } else { // 如果当前节点没有右子树,且是父节点的左子节点
      if (pNode.next != null) {
        TreeLinkNode pcur = pNode;
        TreeLinkNode parent = pcur.next;
        if (parent != null && pcur == parent.left) { 如果当前节点没有右子树,且是父节点的左子节点,则下一个节点就是自己的父节点
          return parent;
        }
        while (parent != null && pcur == parent.right) {如果当前节点没有右子树,且是父节点的右子节点,则向上找到第一个是其父节点左子节点的节点,下一个节点就是该父节点
          pcur = parent;
          parent = pcur.next;
        }
        return parent;
      }
    }
    return null;
  }
}


相关文章
|
1月前
|
人工智能 移动开发 小程序
市面上的小程序平台对比
市面上的小程序平台对比
603 128
|
1月前
|
人工智能 JSON 监控
三步构建AI评估体系:从解决“幻觉”到实现高效监控
AI时代,评估成关键技能。通过错误分析、归类量化与自动化监控,系统化改进AI应用,应对幻觉等问题。Anthropic与OpenAI均强调:评估是产品迭代的核心,数据驱动优于直觉,让AI真正服务于目标。
|
6月前
|
存储 前端开发 搜索推荐
内容,内容资产,以及内容即服务
内容是指在媒体、平台或者其他载体上所呈现的信息、文章、图片、视频、音频等形式的表达。内容可以是有关某个特定主题或领域的知识、观点、故事、娱乐等,通过文字、图像、声音等方式传达给用户或观众。在互联网时代,内容的重要性越来越突出,各种网站、应用和社交媒体平台都以提供优质内容为目标,吸引用户关注和参与。
322 3
|
2月前
|
监控 Cloud Native Java
GraalVM 原生镜像技术详解与实践指南
本文档全面介绍 GraalVM 原生镜像技术的核心概念、架构设计和实践应用。作为革命性的 Java 运行时技术,GraalVM 原生镜像通过提前编译(AOT)将 Java 应用程序编译为本地可执行文件,显著提升了启动性能和资源利用率。本文将深入探讨其工作原理、构建流程、性能优化以及与云原生环境的集成,帮助开发者构建新一代高性能 Java 应用。
221 0
|
网络协议
一文彻底搞定TCP协议的三次握手和四次挥手
通过本章的探险,你将学会如何TCP协议的三次握手和四次挥手
|
6月前
|
编解码 JSON 缓存
巧筑虚拟星河:Dev中的预览技巧
ArkUI预览器是HarmonyOS开发中的高效工具,支持实时与动态预览功能。实时预览可秒级刷新样式修改,动态预览则模拟真机交互体验。设备支持手机、平板、车机及智能手表等,但禁用账号登录、多媒体播放等功能。启动需通过菜单导航,电脑需支持OpenGL 3.2+。预览模式分页面和组件预览,前者测流程后者调样式。虚拟设备可测试多屏幕适配,避免硬件依赖。双向预览实现代码与界面联动,Hamock插件支持数据模拟,提升调试效率。总结:改样式用实时预览,测交互用动态预览,复杂场景需真机验证!
201 15
抖音快手小红书养号脚本,全自动刷视频养号插件,自动看视频看广告软件
这是一款用于抖音账号自动养号的脚本源码,可实现自动化操作,如搜索、关注和随机观看视频等功能。通过界面设置延迟时间和操作次数
|
10月前
|
Java 图形学 Python
用Python和Pygame打造绚丽烟花效果+节日祝福语
本文介绍了一款基于Python和Pygame库实现的烟花效果程序,模拟烟花发射、爆炸及粒子轨迹,结合动态文本显示祝福语,营造逼真的节日氛围。程序包括烟花类、粒子类、痕迹类和动态文本显示功能,通过随机化颜色、速度和粒子数量增加效果多样性。用户可以看到烟花从屏幕底部发射、上升并在空中爆炸,伴随粒子轨迹和动态祝福语“蛇年大吉”、“Happy Spring Festival”。文章详细解析了核心代码逻辑和技术要点,帮助读者理解如何利用Pygame库实现复杂视觉效果,并提供了未来改进方向,如优化性能、增加特效和增强交互性。
558 20
用Python和Pygame打造绚丽烟花效果+节日祝福语
|
10月前
|
监控 安全 网络协议
计算机端口:网络通信的桥梁
计算机端口是网络通信的逻辑通道,支持数据传输和服务识别。本文介绍端口定义、分类(知名、注册、动态端口)、作用及管理方法,涵盖常用知名端口如HTTP(80)、HTTPS(443)等,并强调端口安全配置的重要性,帮助读者全面理解这一关键组件。
784 6
|
12月前
|
存储 安全 数据安全/隐私保护
深入探索iOS与Android的隐私保护机制
在数字化时代,智能手机已成为我们生活中不可或缺的一部分,而随之而来的隐私安全问题也日益凸显。本文旨在对比分析iOS和Android两大操作系统在隐私保护方面的策略和技术实现,揭示它们在设计理念、权限管理、数据加密等方面的不同之处,为读者提供一个全面了解两大系统隐私保护机制的视角。