题目:

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

知识点:

  1. 树的基本知识,节点的2个属性(value、right、left、parent);
  2. while的使用情景:当遇到循环至某一个条件,再进行操作,判断循环条件设置成对立面。例子见代码

注意:

  1. 该代码若输入为最后一个节点时,输出的结果不正确,在哪加限制条件会更合适呢???

代码实现:

public class Num08 {public static void main(String[] args) {//构建一颗树TreeNode aNode= new TreeNode("a");TreeNode bNode= new TreeNode("b");TreeNode cNode= new TreeNode("c");TreeNode dNode= new TreeNode("d");TreeNode eNode= new TreeNode("e");TreeNode fNode= new TreeNode("f");TreeNode gNode= new TreeNode("g");TreeNode hNode= new TreeNode("h");TreeNode iNode= new TreeNode("i");aNode.left = bNode;bNode.parent =aNode;cNode.parent =aNode;bNode.left = dNode;dNode.parent = bNode;eNode.parent = bNode;bNode.right = eNode;eNode.left = hNode;eNode.right = iNode;hNode.parent =eNode;iNode.parent =eNode;aNode.right = cNode;cNode.left = fNode;cNode.right = gNode;fNode.parent = cNode;gNode.parent =cNode;//System.out.println(aNode);//中序遍历树midprint(aNode);TreeNode targetNode = aNode;String nextNodeValue = findNextNode(targetNode);System.out.print("---->");System.out.print(nextNodeValue);}/*** 中序遍历树* @param root*/private static void midprint(TreeNode root) {if(root != null) {midprint(root.left);System.out.print(root.data+ " ");midprint(root.right);}}/*** 找目标节点在中序排列中的下一个节点* @param targetNode* @return*/private static String findNextNode(TreeNode targetNode) {if(targetNode == null) {return null;}//若目标节点有右子树,找右子树中的最左子节点if(targetNode.right!=null) {//注意(想一下)while(targetNode.right.left!=null) {targetNode.right = targetNode.right.left;}return targetNode.right.data;//若目标节点木有右子树}else {//若目标节点为父节点的左子节点,则返回父节点if(targetNode.parent!= null) {return targetNode.parent.data;}else {//若目标节点为父节点的右子节点,则沿指针往上找根节点,至为某个节点的左子节点的根节点,目标节点的下一节点即为此根节点while(targetNode==targetNode.parent.right) {targetNode = targetNode.parent;}return targetNode.parent.data;}}}//节点类public static class TreeNode{public String data;public TreeNode left;public TreeNode right;public TreeNode parent;public TreeNode(String c) {this.data = c;}public String toString() {return "TreeNode [data=" + data + ", left=" + left + ", right=" + right+ "]";}}}

剑指offer——8.二叉树的下一个节点相关推荐

  1. 《剑指offer》二叉树的下一个节点

    题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解析:主要分两大类.一类:该节点有右子树,则找到右子树的最 ...

  2. 剑指offer:二叉树的下一个节点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode {int ...

  3. 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行

    一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...

  4. 剑指offer(18) 二叉树的下一个结点

    题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. setsail 分析二叉树的下一个节点,一共有以下情况 ...

  5. 剑指offer之二叉树的下一个结点

    1 问题 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针 2 分析 比如我现在的二叉树如下 42 61 3 5 7 ...

  6. 剑指offer值二叉树的下一个结点

    题目简介 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 该题目主要考察对二叉树中序遍历规律的理解和分 ...

  7. 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java

    <LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...

  8. 【LeetCode】剑指 Offer 27. 二叉树的镜像

    [LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...

  9. 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)

    文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...

最新文章

  1. 成年人的低头,从拼多多开始
  2. 【练习】c++分别用链队列和普通队列输出杨辉三角
  3. Web服务器面临的五种应用层DOS威胁
  4. c语言全角半角转换函数,全角半角转换函数(示例代码)
  5. 2019-2020-1 20175313 《信息安全系统设计基础》第二周学习总结
  6. 常用的js正则表达式
  7. Linux下的编辑器整理
  8. 官网CentOs7镜像下载详细步骤
  9. 支付系统架构模块划分与设计
  10. android设置默认浏览器下载地址,android手机如何设置默认浏览器?
  11. 【摘记】ABD-Net: Attentive but diverse Person Re-Id
  12. 【无标题】There was an unexpected error (type=Internal Server Error, status=500).
  13. 用51单片机实现抽水水泵
  14. linux图形界面没有输入法,fcitx 输入法看不到选词,上面键盘也不见了!
  15. 2020 ICM Weekend 1 Problem E: Drowning in Plastic
  16. 1 error and 0 warnings potentially fixable with the `--fix` option.
  17. 英伟达 GTC 中国站明日开幕,又将揭秘哪些黑科技?
  18. 维修服务器bga是什么,BGA芯片元器件坏了怎么拆除焊死的BGA?
  19. Shell while语句
  20. linux 进程 系统调用,linux进程与系统调用

热门文章

  1. Android SharedPreference最佳实践
  2. 动态规划思想-----求数组中出现最多数
  3. How do I select an ITEM from a combobox?
  4. 关于对象和类的那些小事
  5. Python中threading的join和setDaemon的区别及用法[例子]
  6. [转]Cuda笔记【1】GPU计算DEMO
  7. DBSCAN聚类算法初探(五)
  8. 大数据时代下的“管理”要素数据化
  9. 帆软报表实现Excel导入,并校验数据
  10. js常用内建对象之:Array