剑指offer系列31-----二叉树的下一个节点
Posted noaman_wgs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer系列31-----二叉树的下一个节点相关的知识,希望对你有一定的参考价值。
【题目】给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。
注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
1 package com.exe7.offer; 2 3 /** 4 * 【题目】给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。 5 * 注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。 6 * @author WGS 7 * 8 */ 9 public class GetNextNode { 10 11 public class TreeNode{ 12 int val; 13 TreeNode left=null; 14 TreeNode right=null; 15 TreeNode next=null; 16 public TreeNode(int val){ 17 this.val=val; 18 } 19 } 20 21 22 public TreeNode getNextNode(TreeNode pNode){ 23 if(pNode==null) return null; 24 //1 判断有无右子树,有就是右子树最左子节点; 25 TreeNode curNode=null; 26 if(pNode.right!=null){ 27 curNode=pNode.right; 28 while(curNode.left!=null){ 29 curNode=curNode.left; 30 } 31 return curNode; 32 } 33 //2 无右子树; 34 else{ 35 //1) 判断该结点是否是其父节点的左结点,是,下个结点就是其父节点。 36 if(pNode.next==null) return null; 37 if(pNode==pNode.next.left){ 38 return pNode.next;//返回其父节点 39 } 40 41 42 //2) 该结点不是父节点的左结点即是其右节点,则判断其父节点是否是父父结点的左结点; 43 curNode=pNode.next;//该结点的父节点 44 while(curNode.next!=null){ 45 if(curNode==curNode.next.left){ 46 return curNode.next;//返回其父节点的父节点 47 } 48 curNode=curNode.next;//继续回溯 49 } 50 } 51 52 return null; 53 54 } 55 }
以上是关于剑指offer系列31-----二叉树的下一个节点的主要内容,如果未能解决你的问题,请参考以下文章