【二叉树】剑指offer 8 二叉树的下一个结点

2023-05-16

描述

给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针。下图为一棵有9个节点的二叉树。树中从父节点指向子节点的指针用实线表示,从子节点指向父节点的用虚线表示
在这里插入图片描述
在这里插入图片描述


题解

这题需要对各种情况分类讨论,一共有三种情况

  • 第一种:如果这个节点的右孩子不为空,根据中序遍历的特点,它的下一个节点是它的右孩子的最左边的孩子
    在这里插入图片描述
  • 第二种:如果这个节点是其父亲的左孩子,根据中序遍历的特点,它的下一个节点就是其父亲(注意如果父亲为null,则该节点是根节点,此时返回null
    在这里插入图片描述
  • 第三种:最复杂的一个情况,该节点为其父亲的右孩子,此时需要向上找到一个祖先节点AA是其父亲的左孩子(即回到了第二种情况),这个情况可以通过画图分析得出,例如下图中的节点4,它的下一个节点为3的父节点5,因为3是其父节点5的左孩子
    在这里插入图片描述
    在这里插入图片描述

所有代码

public class Solution {

    public TreeLinkNode GetNext(TreeLinkNode pNode) {
        // 1. 右孩子不空,则找到它右孩子的最左孩子
        if (pNode.right != null) {
            pNode = pNode.right;
            // 找到最左的节点
            while (pNode.left != null)
                pNode = pNode.left;
            return pNode;
        }

        TreeLinkNode parent = pNode.next;
        if (parent == null)
            return null;

        // 2. 右孩子为空,且是父亲的左孩子,父节点为下一节点
        if (parent.left == pNode)
            return pNode.next;

        // 3. 右孩子为空,且是父亲的右孩子
        while (parent != null) {
            // 向上找父亲,直到节点是其父亲的左孩子,即第二种情况
            if (parent.left == pNode)
                return parent;
            pNode = parent;
            parent = parent.next;
        }
        return null;
    }

    public static void main(String[] args) {
        TreeLinkNode r = new TreeLinkNode(1);
        r.left = new TreeLinkNode(2);
        r.left.next = r;

        TreeLinkNode pnow = r.left;
        pnow.right = new TreeLinkNode(3);
        pnow.right.next = pnow;

        pnow = pnow.right;

        pnow.right = new TreeLinkNode(4);
        pnow.right.next = pnow;
        TreeLinkNode res = new Solution().GetNext(pnow.right);
        System.out.println(res.val);
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【二叉树】剑指offer 8 二叉树的下一个结点 的相关文章

  • 通关剑指 Offer——剑指 Offer II 056. 二叉搜索树中两个节点之和

    1 题目描述 剑指 Offer II 056 二叉搜索树中两个节点之和 给定一个二叉搜索树的 根节点 root 和一个整数 k 请判断该二叉搜索树中是否存在两个节点它们的值之和等于 k 假设二叉搜索树中节点的值均唯一 示例 1 xff1a
  • 【剑指offer系列】剑指offer 03-06

    这次我们来讲解剑指offer的全部题目 xff0c 今天是第一天 xff0c 我们来讲解第三题到第六题 xff08 我也不清楚为什么力扣上查不到第一题和第二题 xff09 一 剑指offer 03 题目链接 xff1a 力扣 题目描述 xf
  • 剑指Offer

    剑指Offer题目 1 面试题03 数组中重复的数字 找出数组中重复的数字 在一个长度为 n 的数组 nums 里的所有数字都在 0 xff5e n 1 的范围内 数组中某些数字是重复的 xff0c 但不知道有几个数字重复了 xff0c 也
  • 一位程序员妹纸讲述她是如何拿到美团offer的?

    作者 xff1a 只爱羽毛球的程序媛 来源 xff1a http t cn EaXy17r 美团 xff0c 我是在拉勾网上投的简历 xff0c 之前也投过一次 xff0c 简历都没通过删选 xff0c 后来让学姐帮我改了一下简历 xff0
  • 【二叉树】剑指offer 77 按之字形顺序打印二叉树

    描述 给定一个二叉树 xff0c 返回该二叉树的之字形层序遍历 xff0c xff08 第一层从左向右 xff0c 下一层从右向左 xff0c 一直这样交替 xff09 输出 1 3 2 4 5 栈解法 用两个栈来存奇数层和偶数层的节点 x
  • 【剑指offer】数组中重复的数字

    解法1 重排序法 抓住题目中的特点 xff0c 由于数组的所有数字都在0 n 1范围内 xff0c 所以数据的范围和下标的范围是一样的 线性扫描数组 xff0c 将扫描到的数放到它对应的下标位置上 若对应位置上已经有这个数则可以判断这是一个
  • 刷完 LeetCode 是什么水平?能拿到什么水平的 offer?

    链接 xff1a https www zhihu com question 32019460 编辑 xff1a 深度学习与计算机视觉 声明 xff1a 仅做学术分享 xff0c 侵删 刷题是我们一贯的学习方式 xff0c 但是学霸和学渣的区
  • 【leetcode】剑指 Offer 11. 旋转数组的最小数字(xuan-zhuan-shu-zu-de-zui-xiao-shu-zi-lcof)(二分)[简单]

    链接 https leetcode cn com problems xuan zhuan shu zu de zui xiao shu zi lcof 耗时 解题 xff1a null min 题解 xff1a 32 min 题意 把一个数
  • 剑指 Offer 46. 把数字翻译成字符串

    剑指 Offer 46 把数字翻译成字符串 给定一个数字 xff0c 我们按照如下规则把它翻译为字符串 xff1a 0 翻译成 a xff0c 1 翻译成 b xff0c xff0c 11 翻译成 l xff0c xff0c 25 翻译成
  • 没有实习我是不是就拿不到大厂offer了吗?---校招答疑

    可能是快放寒假了 xff0c 也可能是再有 2 3 个月就要进入 2020 年春招 xff08 应届生春季校招和暑期实习生招聘 xff09 了 越来越多的同学开始问实习的事情了 我认识的 20 届的同学有已经日常实习两个月以上的 xff0c
  • 剑指 Offer 33. 二叉搜索树的后序遍历序列

    题目描述 xff1a 输入一个整数数组 xff0c 判断该数组是不是某二叉搜索树的后序遍历结果 如果是则返回 true xff0c 否则返回 false 假设输入的数组的任意两个数字都互不相同 参考以下这颗二叉搜索树 xff1a 5 2 6
  • 有了这份程序员面试指南,你离大厂Offer还远吗?| 附推荐书籍

    点击上方蓝色字体 xff0c 关注我 一个在阿里云打工的清华学渣 图by 石头 64 长白山 关于作者 xff1a 程序猿石头 ID tangleithu xff0c 现任阿里巴巴技术专家 xff0c 清华学渣 xff0c 前大疆后端 Le
  • 剑指offer

    目录 第2章 面试需要的基础知识 2 3 数据结构 2 3 1 数组 xff1a 二维数组中的查找 2 3 2 字符串 xff1a 替换空格 2 3 3 链表 xff1a 从尾到头打印链表 2 3 4 树 xff1a 重建二叉树 2 3 5
  • 剑指offer T8跳台阶

    由推导可知 xff0c 递推公式为 f n 61 f n 1 43 f n 2 迭代法 xff1a 递归 xff1a 递归优化 xff08 保存结果 xff0c 剪枝 xff09 xff1a 转载于 https www cnblogs co
  • 裸辞3个月扛不住后,随便接了offer更惨!

    最近发现年底找工作的人不少 xff0c 部门里就2个hc xff0c 一周能收2000 43 简历 xff0c 这比例有点 过分 了 虽说大部分是年底先看看机会试试水 xff0c 准备年后冲击的 xff0c 但看简历里也有不少中间裸辞的 x
  • 【LeetCode】剑指 Offer 63. 股票的最大利润 p304 -- Java Version

    题目链接 xff1a https leetcode cn problems gu piao de zui da li run lcof 1 题目介绍 xff08 63 股票的最大利润 xff09 假设把某股票的价格按照时间先后顺序存储在数组
  • 【LeetCode】剑指 Offer 65. 不用加减乘除做加法 p310 -- Java Version

    题目链接 xff1a https leetcode cn problems bu yong jia jian cheng chu zuo jia fa lcof 1 题目介绍 xff08 65 不用加减乘除做加法 xff09 写一个函数 x
  • 成为大厂offer收割机是怎样一种体验?

    一 现状 市场红利正盛 人才短板暴露 计算机的发展历程已经走过了大半个世纪 在当前的互联网 时代下 中国开发者市场正在迎来三大红利 全民编程 行业升级 技术大生态 人人都会编程 家家都是技术公司 全行业数字化升级 面对大量的需求 目前IT人
  • 程序媛菜鸡面经(八 - offer篇)

    投简历 简历是要多投的 但是有时候投多了简历也会有问题 头条 没有面试机会 在看过简历后HR发邮件告知我 从简历上能看出你是一位很优秀的人 但看不出你在前端 技术方面的竞争力 当时投的是旧版简历 于是我回邮问简历有误能否重申 至今未有回音
  • 树09--二叉树的下一个结点

    树09 二叉树的下一个结点 jz57 题目概述 解析 参考答案 注意事项 说明 题目概述 算法说明 给定一个二叉树其中的一个结点 请找出中序遍历顺序的下一个结点并且返回 注意 树中的结点不仅包含左右子结点 同时包含指向父结点的next指针

随机推荐

  • 【树】树的子结构

    来自剑指offer 这题有点难度 xff0c 解题思想是 xff1a 若B是A的子树 xff0c 则子树的根节点可能为树A中的任意一个节点 xff0c 因此只需要遍历树A的每个节点 xff0c 判断以这个节点为根节点的树是否包含子树B xf
  • Docker 网络

    1 简介 容器网络实质上是由 Docker 为应用程序所创造的虚拟环境的一部分 xff0c 它能让应用从宿主机操作系统的网络环境中独立出来 xff0c 形成容器自有的网络设备 IP 协议栈 端口套接字 IP 路由表 防火墙等与网络相关的模块
  • Ubuntu 20安装Nvidia驱动 + cuda10.1 + Anaconda + pytorch 1.5

    安装Nvidia驱动 输入命令 ubuntu drivers devices查看显卡推荐的驱动选择recommend的版本进行安装 xff0c 例如我的是460 sudo apt install nvidia driver 460 安装完成
  • VScode ssh远程服务器解决试图写入的管道不存在

    解决方案 xff0c 在C盘用户目录下找到 ssh文件 xff0c 删除known hosts文件或打开known hosts删除对应的ip
  • S3DIS场景点云数据集

    S3DIS是常用的室内场景分割数据集 xff0c 包含6个Area xff0c 常用的数据格式如下 xff1a Stanford3dDataset v1 2 Aligned Version xff0c 百度网盘下载 xff0c 提取码0ac
  • jupyter远程连接服务器

    服务器终端输入命令 jupyter notebook no browser port 61 8889 本地终端输入命令 ssh N f L localhost 8888 localhost 8889 username 64 ip usern
  • win10远程Linux桌面

    在Linux服务器安装xrdp xff1a sudo apt install xrdp win10远程 xff0c win 43 R xff0c 输入mstsc xff0c 输入linux服务器ip和账户 具体参考 https www ma
  • python控制输出精度

    a span class token operator 61 span span class token number 3 1456 span b span class token operator 61 span span class t
  • 多分类混淆矩阵的理解

    借用其它博客的一张例子示意图 xff0c 该图为一个三分类问题的混淆矩阵 xff0c 对角线的值表示分类器对该类别预测正确的个数 xff0c 每一列纵轴表示这个类别真实的样本数 xff0c 例如从第一列可以得知猫一共有10 43 3 43
  • ERROR: Could not find a version that satisfies the requirement dateutil

    安装dateutil出错 xff0c 提示 ERROR Could not find a version that satisfies the requirement dateutil 解决办法 xff1a pip install pyth
  • RTX3090 + cuda 11.1 + torch1.9.0 安装 MinkowskiEngine

    创建conda环境 conda create n mink span class token assign left variable python span span class token operator 61 span span c
  • pytorch更新tensor中指定index位置的值scatter_add_

    使用scatter add 更新tensor张量中指定index位置的值 例子 span class token keyword import span torch a span class token operator 61 span t
  • Docker 私有仓库

    1 Registry 官方私有仓库 xff0c 优点 xff1a 简单 xff1b 缺点 xff1a 部署无法进行复杂的管理操作 1 1 镜像 docker pull registry 2 7 1 docker pull joxit doc
  • pytorch one-hot编码

    使用scatter 将标签转换为one hot span class token keyword import span torch num class span class token operator 61 span span clas
  • python安装meshplot

    用conda或者pip直接安装如果出问题 xff0c 可以考虑使用以下方法 xff0c 从代码仓库中安装 下载代码库 span class token function git span clone https github com sko
  • python matplotlib quiver

    matplotlib中的 quiver方法可用于绘制箭头 xff08 向量 xff09 xff0c 下面介绍二维和三维中的使用方法 二维箭头向量绘制 一般参数如下 quiver span class token punctuation sp
  • 【链表】剑指offer 22. 链表中倒数最后k个结点

    题目 输入一个长度为 n 的链表 xff0c 设链表中的元素的值为 ai xff0c 输出一个链表 xff0c 该输出链表包含原链表中从倒数第 k 个结点至尾节点的全部节点 如果该链表长度小于k xff0c 请返回一个长度为 0 的链表 数
  • 【二叉树】剑指offer 54 二叉搜索树的第k个结点

    描述 给定一棵结点数为 n 二叉搜索树 xff0c 请找出其中的第 k 小的TreeNode结点 数据范围 xff1a 0 n lt 61 100
  • 【二叉树】剑指offer 77 按之字形顺序打印二叉树

    描述 给定一个二叉树 xff0c 返回该二叉树的之字形层序遍历 xff0c xff08 第一层从左向右 xff0c 下一层从右向左 xff0c 一直这样交替 xff09 输出 1 3 2 4 5 栈解法 用两个栈来存奇数层和偶数层的节点 x
  • 【二叉树】剑指offer 8 二叉树的下一个结点

    描述 给定一个二叉树其中的一个结点 xff0c 请找出中序遍历顺序的下一个结点并且返回 注意 xff0c 树中的结点不仅包含左右子结点 xff0c 同时包含指向父结点的next指针 下图为一棵有9个节点的二叉树 树中从父节点指向子节点的指针