摘自剑指Offer
一、题目描述
- 给定一个节点
- 在中序遍历中输出它的下一个节点
二、Code
1、思路
-
首先要明确中序遍历的顺序 左->根->右
- 若给定结点有右节点,则寻找右节点的左结点,直到没有左节点为止
- 否则寻找父节点。
- 若父节点的左节点为本节点,则输出父节点。
- 若父节点的右节点为本节点则接着往上。
2、Code
1 package algorithm; 2 3 /** 4 * Created by adrian.wu on 2019/3/26. 5 */ 6 public class InOrderNextNode { 7 static class BinaryTreeNode { 8 BinaryTreeNode parent, left, right; 9 int val; 10 11 public BinaryTreeNode(int val) { 12 this.val = val; 13 parent = null; 14 left = null; 15 right = null; 16 } 17 } 18 19 public static BinaryTreeNode inNextNode(BinaryTreeNode node) { 20 if (node == null) return null; 21 22 if (node.right != null) { 23 BinaryTreeNode rightStopNode = node.right; 24 while (rightStopNode.left != null) rightStopNode = rightStopNode.left; 25 return rightStopNode; 26 } 27 28 BinaryTreeNode parent = node; 29 while (parent != null) { 30 if (parent.left == node) return parent; 31 node = parent; 32 parent = parent.parent; 33 } 34 return null; 35 } 36 }