剑指offer——8.二叉树的下一个节点
题目:
题:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
知识点:
- 树的基本知识,节点的2个属性(value、right、left、parent);
- while的使用情景:当遇到循环至某一个条件,再进行操作,判断循环条件设置成对立面。例子见代码
注意:
- 该代码若输入为最后一个节点时,输出的结果不正确,在哪加限制条件会更合适呢???
代码实现:
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.二叉树的下一个节点相关推荐
- 《剑指offer》二叉树的下一个节点
题目:给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解析:主要分两大类.一类:该节点有右子树,则找到右子树的最 ...
- 剑指offer:二叉树的下一个节点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. /* struct TreeLinkNode {int ...
- 《剑指offer》-- 二叉树的下一个结点、对称二叉树、按之字性顺序打印二叉树、把二叉树打印成多行
一.二叉树的下一个结点: 1.题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 2.解题思路: 分析二叉树 ...
- 剑指offer(18) 二叉树的下一个结点
题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. setsail 分析二叉树的下一个节点,一共有以下情况 ...
- 剑指offer之二叉树的下一个结点
1 问题 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针 2 分析 比如我现在的二叉树如下 42 61 3 5 7 ...
- 剑指offer值二叉树的下一个结点
题目简介 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 解题思路 该题目主要考察对二叉树中序遍历规律的理解和分 ...
- 《LeetCode力扣练习》剑指 Offer 27. 二叉树的镜像 Java
<LeetCode力扣练习>剑指 Offer 27. 二叉树的镜像 Java 一.资源 题目: 请完成一个函数,输入一个二叉树,该函数输出它的镜像. 例如输入: 4 / 2 7 / \ / ...
- 【LeetCode】剑指 Offer 27. 二叉树的镜像
[LeetCode]剑指 Offer 27. 二叉树的镜像 文章目录 [LeetCode]剑指 Offer 27. 二叉树的镜像 一.递归法 二.辅助栈(或队列) 一.递归法 根据二叉树镜像的定义,考 ...
- 算法leetcode|剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树(rust很强)
文章目录 剑指 Offer 27. 二叉树的镜像|226. 翻转二叉树: 样例 1: 限制: 分析 题解 rust go c++ java python 原题传送门:https://leetcode. ...
最新文章
- 成年人的低头,从拼多多开始
- 【练习】c++分别用链队列和普通队列输出杨辉三角
- Web服务器面临的五种应用层DOS威胁
- c语言全角半角转换函数,全角半角转换函数(示例代码)
- 2019-2020-1 20175313 《信息安全系统设计基础》第二周学习总结
- 常用的js正则表达式
- Linux下的编辑器整理
- 官网CentOs7镜像下载详细步骤
- 支付系统架构模块划分与设计
- android设置默认浏览器下载地址,android手机如何设置默认浏览器?
- 【摘记】ABD-Net: Attentive but diverse Person Re-Id
- 【无标题】There was an unexpected error (type=Internal Server Error, status=500).
- 用51单片机实现抽水水泵
- linux图形界面没有输入法,fcitx 输入法看不到选词,上面键盘也不见了!
- 2020 ICM Weekend 1 Problem E: Drowning in Plastic
- 1 error and 0 warnings potentially fixable with the `--fix` option.
- 英伟达 GTC 中国站明日开幕,又将揭秘哪些黑科技?
- 维修服务器bga是什么,BGA芯片元器件坏了怎么拆除焊死的BGA?
- Shell while语句
- linux 进程 系统调用,linux进程与系统调用