《剑指offer》编程题java实现(二十八):二叉树的下一个节点
2018-03-17 12:10
411 查看
问题描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针
思路分析
熟悉中序遍历的模式中左右,下一个节点可以分为以下三种情况:
该节点有右节点,那么下一个节点就是右节点子树部分中的左节点
该节点没有右节点,但是是父节点的左节点,那么,下一个节点就是父节点
该节点没有右节点,同时也是父节点的右节点,这种情况比较麻烦,要向上一直遍历,直到找到是它父节点的左子节点的节点,那么这个节点的父节点就是下一个节点
上述过程中要时刻判断,是否为空的情况。
代码展示
注意该代码是可以优化的,这样写只是便于考虑
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针
思路分析
熟悉中序遍历的模式中左右,下一个节点可以分为以下三种情况:
该节点有右节点,那么下一个节点就是右节点子树部分中的左节点
该节点没有右节点,但是是父节点的左节点,那么,下一个节点就是父节点
该节点没有右节点,同时也是父节点的右节点,这种情况比较麻烦,要向上一直遍历,直到找到是它父节点的左子节点的节点,那么这个节点的父节点就是下一个节点
上述过程中要时刻判断,是否为空的情况。
代码展示
注意该代码是可以优化的,这样写只是便于考虑
package com.offer; public class GetNextTreeLinkNode { public TreeLinkNode GetNext(TreeLinkNode pNode) { if (pNode == null) { return null; } TreeLinkNode next = null; // 该节点有右节点 if (pNode.right != null) { // 查找该右节点部分的左节点 TreeLinkNode rightNode = pNode.right; while (rightNode.left != null) rightNode = rightNode.left; next = rightNode; // 该节点没有右节点 } else if (pNode.next != null) {//该节点有父节点 TreeLinkNode parentNode = pNode.next;// 其实就是父节点,牛客网是这样定义的 TreeLi 4000 nkNode curNode = pNode; if (pNode == parentNode.right) {//为父节点的右节点 while (parentNode.next != null) { curNode = parentNode; parentNode = parentNode.next; if (curNode == parentNode.left) { next = parentNode; break; } } } else //为父节点的左节点 next = parentNode; } return next; } }
相关文章推荐
- 剑指offer面试题58 二叉树的下一个节点(Java实现)
- (php实现剑指offer)二叉树的下一个节点
- 《剑指offer》编程题java实现(二十六):重建二叉树(两种方法)
- 二叉树的下一个节点(Java实现)
- 剑指offer编程题Java实现——面试题13在O(1)时间内删除链表节点
- 《剑指offer》编程题java实现(二十二):两个链表的第一个公共节点
- 剑指offer编程题Java实现——面试题6重建二叉树
- 剑指Offer实现面试题8-二叉树的下一个节点
- 剑指offer----两个链表的第一个公共节点----java实现
- java语言实现的二叉树的各种操作(包括递归与非递归遍历二叉树,求二叉树的高度,节点总数,叶子节点等)
- 剑指offer系列之56:二叉树的下一个节点
- 剑指offer编程题Java实现——面试题5从头到尾打印链表
- Java实现:在二叉树中,求距离最远的两个节点的距离
- 剑指Offer面试题58:二叉树的下一个节点
- 剑指Offer——编程题的Java实现(更新完毕……)
- 二叉树定义及相关术语、节点数计算公式、代码实现(遍历,Java版)
- Java笔记---剑指Offer(一:Java实现重建二叉树)
- 剑指offer----链表中环的入口节点----java实现
- 剑指Offer:面试题23——从上往下打印二叉树(java实现)
- 剑指offer之求二叉树的深度(非递归的层次遍历)Java实现