/**
* 面试题8:二叉树的下一个节点
* 给定一颗二叉树和其中的一个节点,如何找出中序遍历的下一个节点?树中的节点除了有两个分别指向左、右子节点的指针,还有一个指向父节点的指针
*/
public class No8 {
public static void main(String[] args) {
int[] pre = {1, 2, 4, 7, 3, 5, 6, 8};
int[] in = {4, 7, 2, 1, 5, 3, 8, 6};
//使用面试题7重建二叉树来构建测试用例
BinaryTree root = No7.reConstructBinaryTree(pre, in);
BinaryTree.printInTree(root);
BinaryTree result = No8.nextNode(root);
System.out.println(result.value);
}
public static BinaryTree nextNode(BinaryTree currentNode) {
if (currentNode == null) {
return null;
}
BinaryTree result;
if (currentNode.right != null) {
result = currentNode.right;
while (result.left != null) {
result = result.left;
}
return result;
}
if (currentNode == currentNode.pre.left) {
return currentNode.pre;
} else {
result = currentNode.pre;
while (result != null) {
if (result == result.pre.left) {
return result;
} else {
result = result.pre;
}
}
return null;
}
}
}
寻找二叉树的中序遍历的下一个节点流程图如下:
总结(TODO):
寻找二叉树的前序遍历的下一个节点流程图:
寻找二叉树的后序遍历的下一个节点流程图: