题目:
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
思路:
我们具体分情况考虑。当一个节点有右子树,那么他的下一个节点就是其右子树的最左子节点。当以节点没有右子树,那么再分为他是他父亲的左孩子还是右孩子。当该节点是其父亲节点的左孩子,那么他的下一节点就是其父亲。当该节点是其父亲节点的右孩子,那么他的下一节点是距离最近的父节点是该父节点的父节点的左孩子的节点。
import java.util.Scanner;
public class MS8 {
public static BinaryNode1 getNextNode(BinaryNode1 node){
BinaryNode1 resNode = null;
BinaryNode1 anode = node.rightChild;
if (anode!=null){
while (anode.leftChild!=null){
anode = anode.leftChild;
}
resNode = anode;
}
else {
while (node.father!=null){
if (node==node.father.leftChild){
resNode = node.father;
break;
}
node = node.father;
}
}
return resNode;
}
}