面试题58. 二叉树的下一个节点
来源:互联网 发布:单片机c51简易数字钟 编辑:程序博客网 时间:2024/06/07 05:18
面试题58. 二叉树的下一个节点
题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
比如下图中,中序遍历是【d、b、h、e、i、a、f、c、g】
根据中序遍历,我们能发现这样的规律:
- 如果一个结点有右子树,那么它的下一个结点就是右子树的最左结点
- 比如 a有右子树,a的下一个结点是右子树的最左,也就是f
- 比如 b有右子树,b的下一个结点是h
- 如果一个结点没有右子树,这种情况需要通过循环,从当前结点开始沿着父指针向上找,直到找到一个是左孩子的结点,这个左孩子结点的父节点,就是下一个结点。
- 比如 h,它是e的左孩子,所以h的下一个结点就是e
- 比如 i,它是e的右孩子,所以从i开始向上找直到找到一个左孩子。由于e是b的右孩子,所以需要继续向上找。直到找到了b(b是a的左孩子),所以返回a。
根据上面的算法,就能写出代码:
class TreeLinkNode { int val; TreeLinkNode left = null; TreeLinkNode right = null; TreeLinkNode next = null; TreeLinkNode(int val) { this.val = val; }}public class Solution { public TreeLinkNode GetNext(TreeLinkNode pNode){ if(pNode == null) return null; // 如果pNode有右子树,则下一个节点是右子树的最左 if(pNode.right != null) { TreeLinkNode node = pNode.right; while(node.left != null) { // 循环找最左 node = node.left; } return node; } // 如果pNode没有右子树,则 // 把pNode作为当前节点,向上找父节点,如果当前节点是父节点的左孩子,则返回父节点 // 否则把pNode的父节点作为当前节点,向上找当前节点的父节点,直到当前节点是父节点的左孩子 TreeLinkNode node = pNode; while(node.next != null && node.next.left != node) { node = node.next; } return node.next; }}
阅读全文
0 0
- 面试题58. 二叉树的下一个节点
- 面试题58:二叉树的下一个节点
- 剑指Offer面试题58:二叉树的下一个节点
- 【剑指offer】面试题 8:二叉树的下一个节点
- 【剑指offer】面试题8:二叉树的下一个节点
- 面试题8:二叉树的下一个节点
- 剑指Offer(第二版)面试题8:二叉树的下一个节点
- 剑指offer面试题58 二叉树的下一个节点(Java实现)
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- 二叉树的下一个节点
- int main(int argc,char *argv[])函数介绍
- 数据脱敏
- Servlet笔记——(1.4.2)GET请求协议
- JavaScript深入之执行上下文栈
- activeMQ指南针_发布activeMQ的可视化运行维护工具:activeMQ_Spanner
- 面试题58. 二叉树的下一个节点
- python中的zip函数
- 关于windows程序设计的一些问题
- Dubbo介绍
- 前端限制上传文件的大小
- 开通博客
- 【demo】新建一个springboot项目最简单的方法
- WEB工具
- 根据前序遍历序列和中序遍历序列构造二叉树算法