寻找二叉树下一个节点

  • 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之寻找二叉树下一个节点相关推荐

  1. 【LeetCode】剑指 Offer 55 - I. 二叉树的深度

    [LeetCode]剑指 Offer 55 - I. 二叉树的深度 文章目录 [LeetCode]剑指 Offer 55 - I. 二叉树的深度 一.后序遍历(DFS) 二.层序遍历 一.后序遍历(D ...

  2. 【LeetCode】剑指 Offer 68 - II. 二叉树的最近公共祖先

    [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 文章目录 [LeetCode]剑指 Offer 68 - II. 二叉树的最近公共祖先 一.DFS 一.DFS 祖先的定义 ...

  3. 剑指 Offer II 047. 二叉树剪枝

    剑指 Offer II 047. 二叉树剪枝: 题目链接 :剑指 Offer II 047. 二叉树剪枝 题目: 给定一个二叉树 根节点 root ,树的每个节点的值要么是 0,要么是 1.请剪除该二 ...

  4. 【LeetCode】剑指 Offer 37. 序列化二叉树

    [LeetCode]剑指 Offer 37. 序列化二叉树 文章目录 [LeetCode]剑指 Offer 37. 序列化二叉树 package offer;import java.util.Link ...

  5. 【LeetCode】剑指 Offer 07. 重建二叉树

    [LeetCode]剑指 Offer 07. 重建二叉树 文章目录 [LeetCode]剑指 Offer 07. 重建二叉树 package offer;import java.util.ArrayD ...

  6. 剑指 Offer II 044. 二叉树每层的最大值

    链接:剑指 Offer II 044. 二叉树每层的最大值 题解: /*** Definition for a binary tree node.* struct TreeNode {* int va ...

  7. C#刷剑指Offer | 从上到下打印二叉树

    [C#刷题]| 作者 / Edison Zhou 这是EdisonTalk的第288篇原创内容 我们来用之前学到的数据结构知识来刷<剑指Offer>的一些核心题目(精选了其中30+道题目) ...

  8. [剑指offer]8.重建二叉树

    题目 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2, ...

  9. 剑指Offer #04 重建二叉树(递归)

    题目来源:牛客网-剑指Offer专题 题目地址:重建二叉树 题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序 ...

最新文章

  1. Python使用numpy函数hsplit水平(按列)拆分numpy数组(返回拆分后的numpy数组列表)实战:水平(按列)拆分二维numpy数组、split函数水平(按列)拆分二维numpy数组
  2. R语言二项分布函数Binomial Distribution(dbinom, pbinom, qbinom rbinom)实战
  3. mysqll底层分享(一):MySQL索引背后的数据结构及算法原理
  4. IT 语音 java hi_Java bithift陌生
  5. windows10商店无法下载linux,Windows 10 Store 下载极慢
  6. e-mobile帐号状态存在异常_一文掌握异常检测的实用方法 | 技术实践
  7. leetcode64. 最小路径和(dp)
  8. java常见异常类图(分类了Error/RuntimeExecption、check Exception)
  9. Java 重写与重载
  10. Android 短信开发学习
  11. vue请求PHP接口报错provisional headers are shown
  12. centos7 防火墙_【Linux简单实用小命令001】CentOS 7、8的防火墙端口开放
  13. Access数据库压缩失败后修复经历
  14. python口算训练出题
  15. Android开发时手机屏幕实时同步显示在电脑上
  16. 【Python】Python基本概念、print()输出函数、标准数据类型、type()函数与isinstance()函数、数据类型转换、变量与变量名的命名规则、注释
  17. DSRN——Image Super-Resolution via Dual-State Recurrent Network
  18. Spring Boot 和 Spring 有什么区别
  19. MIT-BIH 心律失常数据库介绍
  20. 冒泡已知4个数c语言,C语言-《一维数和冒泡算法》.ppt

热门文章

  1. 比_thread高级的threading模块,对比释放锁例子
  2. python通过get方法获取key对应的值
  3. caffe :error MSB4062: 未能从程序集** 加载任务“NuGetPackageOverlay”
  4. 目标检测——域适应的学习笔记
  5. WARNING:tensorflow:Entity <bound method GRUCell.call of <tensorflow.python.ops.rnn_cell_impl.GRUCell
  6. GitLab CI/CD conda: command not found
  7. skimage exposure模块解读
  8. Git和Github实现代码同步
  9. leetcode953. Verifying an Alien Dictionary
  10. leetcode907.SumofSubarrayMinimums