剑指Offer之寻找二叉树下一个节点
寻找二叉树下一个节点
- 1、题目描述
- 2、题目理解
1、题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
2、题目理解
思路一:
既然给了二叉树的某个结点,且二叉树存储着指向父结点的指针(next),那我们可以先找到根节点,再对树进行中序遍历,最后根据中序遍历结果找到给定结点的下一结点
代码:
import java.util.ArrayList;//给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。//既然给了二叉树的某个结点,且二叉树存储着指向父结点的指针(next),那我们可以先找到根节点,再对树进行中序遍历,
//最后根据中序遍历结果找到给定结点的下一结点//public class GetNextNode {public static void main(String[] args) { //类的实例化GetNextNode getNextNode = new GetNextNode();//按照这种方式创建一个二叉树TreeLinkNode node8 = new TreeLinkNode(8);TreeLinkNode node6 = new TreeLinkNode(6);TreeLinkNode node10 = new TreeLinkNode(10);TreeLinkNode node5 = new TreeLinkNode(5);TreeLinkNode node7 = new TreeLinkNode(7);TreeLinkNode node9 = new TreeLinkNode(9);TreeLinkNode node11 = new TreeLinkNode(11);
// TreeLinkNode node12 = new TreeLinkNode(12);node8.left=node6;node8.right=node10;node6.left=node5;node6.right=node7;node10.left=node9;node10.right=node11;// node11.left =node12;
// System.out.println(getNextNode.GetNext(node11));System.out.println(getNextNode.GetNext(node7));
// System.out.println(node8.next);}public static class TreeLinkNode {int val;TreeLinkNode left = null;TreeLinkNode right = null;TreeLinkNode next = null;TreeLinkNode(int val){this.val = val;}// 下面这个必须写,不写会返回 @7852e922@Overridepublic String toString() {return "TreeLinkNode{" +"val=" + val +'}';}}ArrayList<TreeLinkNode> list = new ArrayList<>();public TreeLinkNode GetNext(TreeLinkNode pNode){ TreeLinkNode par = pNode;System.out.println("第一次输出为:"+par);while(par.next!=null){par = par.next;System.out.println("第二次输出为:"+par);} InOrder(par);System.out.println("+++节点输出为:"+list);for(int i=0;i<list.size();i++){if(pNode == list.get(i)){System.out.println(i);// 最后的返回语句return i==list.size()-1?null:list.get(i+1); } }return null;}void InOrder(TreeLinkNode pNode){if(pNode!=null){ // 符合中序遍历顺序左->根->右InOrder(pNode.left);list.add(pNode);InOrder(pNode.right);System.out.println("下一个节点输出为:"+list);} }
}
这个代码是不是有问题啊,第7号节点的返回值是空。
其实不是,题目中的节点不能是没有子孙的子节点,这个节点必须是包含左右子树。
参考链接:https://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e?answerType=1&f=discussion
思路二:
1、如果一个节点有右子树的时候,那么它的下一个节点就是它的右子树中的最左子节点。(比如说b的下一个节点是h,可以试着画一个二叉树)
剑指Offer之寻找二叉树下一个节点相关推荐
- 【LeetCode】剑指 Offer 55 - I. 二叉树的深度
[LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...
- 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先
[LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...
- 剑指 Offer II 047. 二叉树剪枝
剑指 Offer II 047. 二叉树剪枝: 题目链接 :剑指 Offer II 047. 二叉树剪枝 题目: 给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1.请剪除该二 ...
- 【LeetCode】剑指 Offer 37. 序列化二叉树
[LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...
- 【LeetCode】剑指 Offer 07. 重建二叉树
[LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...
- 剑指 Offer II 044. 二叉树每层的最大值
链接:剑指 Offer II 044. 二叉树每层的最大值 题解: /*** Definition for a binary tree node.* struct TreeNode {* int va ...
- C#刷剑指Offer | 从上到下打印二叉树
[C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第288篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...
- [剑指offer]8.重建二叉树
题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...
- 剑指Offer #04 重建二叉树(递归)
题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...
最新文章
- Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
- R语言二项分布函数Binomial Distribution(dbinom, pbinom, qbinom rbinom)实战
- mysqll底层分享(一):MySQL索引背后的数据结构及算法原理
- IT 语音 java hi_Java bithift陌生
- windows10商店无法下载linux,Windows 10 Store 下载极慢
- e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践
- leetcode64. 最小路径和(dp)
- java常见异常类图(分类了Error/RuntimeExecption、check Exception)
- Java 重写与重载
- Android 短信开发学习
- vue请求PHP接口报错provisional headers are shown
- centos7 防火墙_【Linux简单实用小命令001】CentOS 7、8的防火墙端口开放
- Access数据库压缩失败后修复经历
- python口算训练出题
- Android开发时手机屏幕实时同步显示在电脑上
- 【Python】Python基本概念、print()输出函数、标准数据类型、type()函数与isinstance()函数、数据类型转换、变量与变量名的命名规则、注释
- DSRN——Image Super-Resolution via Dual-State Recurrent Network
- Spring Boot 和 Spring 有什么区别
- MIT-BIH 心律失常数据库介绍
- 冒泡已知4个数c语言,C语言-《一维数和冒泡算法》.ppt
热门文章
- 比_thread高级的threading模块,对比释放锁例子
- python通过get方法获取key对应的值
- caffe :error MSB4062: 未能从程序集** 加载任务“NuGetPackageOverlay”
- 目标检测——域适应的学习笔记
- WARNING:tensorflow:Entity <bound method GRUCell.call of <tensorflow.python.ops.rnn_cell_impl.GRUCell
- GitLab CI/CD conda: command not found
- skimage exposure模块解读
- Git和Github实现代码同步
- leetcode953. Verifying an Alien Dictionary
- leetcode907.SumofSubarrayMinimums