二叉树的下一个结点(剑指offer_8)
题目描述
给定一个二叉树和其中一个结点,请找出中序遍历顺序的下一个结点并返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
public class TreeLinkNode {
    int val;
    TreeLinkNode left = null;
    TreeLinkNode right = null;
    TreeLinkNode next = null; // 指向父结点的指针
    TreeLinkNode(int val) {
        this.val = val;
    }
}
解题思路
我们先来回顾一下中序遍历的过程:先遍历树的左子树,再遍历根节点,最后再遍历右子树。所以最左节点是中序遍历的第一个结点。
void traverse(TreeNode root)
{
if(root == null) return;
traverse(root.left);
visit(root);
traverse(root.right);
}
- 如果一个节点的右子树不为空,那么该节点的下一个节点是右子树的最左节点;
- 否则,向上找第一个左链接指向的树包含该节点的祖先节点。
public TreeLinkNode GetNext(TreeLinkNode pNode)
{
if (pNode.right != NULL)
{
TreeLinkNode node = pNode.right;
while(node.left != null)
node = node.left;
return node;
}
else
{
while(pNode.next != null )
{
TreeLinkNode parent = pNode.next;
if(parent.left == pNode)
return parent;
pNode = pNode.next;
}
}
return null;
}
二叉树的下一个结点(剑指offer_8)的更多相关文章
- 【Java】 剑指offer(7) 二叉树的下一个结点
		本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点? ... 
- 【剑指Offer】二叉树的下一个结点 解题报告(Python)
		[剑指Offer]二叉树的下一个结点 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interviews ... 
- 【剑指offer】面试题 8. 二叉树的下一个结点
		面试题 8. 二叉树的下一个结点 NowCoder 题目描述 给定一棵二叉树和其中的一个结点,如何找出中序遍历顺序的下一个结点?树中的结点除了有两个分别指向左右子结点的指针以外,还有一个指向父结点的指 ... 
- 剑指offer:JZ8 二叉树的下一个结点
		JZ8 二叉树的下一个结点 描述 给定一个二叉树其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的next指针.下图为一棵有9个节点的二叉 ... 
- Go语言实现:【剑指offer】二叉树的下一个结点
		该题目来源于牛客网<剑指offer>专题. 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回. 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. Go语 ... 
- 剑指Offer 57. 二叉树的下一个结点 (二叉树)
		题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 题目地址 https://www.nowcoder.c ... 
- 剑指offer五十七之二叉树的下一个结点
		一.题目 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 二.思路 结合图,我们可发现分成两大类: 1.有右子树 ... 
- (剑指Offer)面试题58:二叉树的下一个结点
		题目: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 思路: 考虑中序遍历的过程, 如果当前结点存在右子节点, ... 
- 剑指Offer——二叉树的下一个结点
		题目描述: 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回.注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针. 分析: 如果该结点存在右子树,那么返回右子树的最左结 ... 
随机推荐
- 【洛谷P1983 车站分级】
			这题好像是个蓝题.(不过也确实差不多QwQ)用到了拓扑排序的知识 我们看这些这车站,沿途停过的车站一定比未停的车站的级别高 所以,未停靠的车站向已经停靠的车站连一条边,入度为0的车站级别就看做1 然后 ... 
- Bash is an sh-compatible command language interpreter that executes commands read from the standard input or from a file.
			w https://linux.die.net/man/1/bash bash - GNU Bourne-Again SHell Description Bash is an sh-compatibl ... 
- fedora禁用(开机启动)服务和进程管理
			首先要查看有哪些(开机启动)服务 chkconfig --list 或者: systemctl list-units 然后, 根据需要进行禁用服务的开机启动: chkconfig service_na ... 
- 在mpvue或者Vue中使用VUEX
			第一个页面Index,主页哦 import Vue from'vue' import Vuex from'vuex' import getters from'./getters' import sta ... 
- 红米4高配版 qusb bulk     unknow device   不加电,不亮灯,没反应的 黑砖 的维修方法
			unknow device处理 1. 按住按住音量减键和开机键3分钟左右 (我按了10秒左右,就成功了.) unknow device 就变qualcomm hs-usb qdloader 9008 ... 
- C++ 命名管道示例
			想做一个 Hook CreateFile 重定向到内存的功能,貌似可以假借命名管道实现这个功能.不熟悉命名管道,做了几个demo,如下: Server: // NamedPipeServer.cpp ... 
- unity editor 折叠树
			https://blog.csdn.net/e295166319/article/details/52370575 需要两个类:树节点类和界面实现类 1:树节点类(TreeNode) using Un ... 
- mybatis001-动态标签Trim用法
			Mybatis动态标签Trim用法 一.<trim></trim>标签用法 示例一: select * from user <trim prefix="WHER ... 
- mooc-IDEA 收藏位置和文件--003
			六.IntelliJ IDEA -收藏位置和文件(类/函数) 1.收藏自己喜欢的文件---代码 添加一个Favorites列表 定义名称 Help->Find Action... 选择Add t ... 
- centos7下搭建Testlink环境详细过程
			花了半天的时间终于搭建好了完整的Testlink环境,主要包括Mysql以及PHP的版本.未关闭防火墙.以及安装配置过程中遇到的一些问题.以下是详细的搭建过程. 一.工具准备 以下是我在搭建过程中用到 ... 
