题目:
给定一棵二叉树和其中的一个节点,如何找出中序遍历序列的下一个节点?树中的节点除了有两个分别指向左右子节点的指针,还有一个指向父节点的指针。树节点的定义:
class TreeNode{
TreeNode left;
TreeNode right;
TreeNode parent;
int val;
}
思路:
画出具体的二叉树分析可知,中序遍历序列中一个节点的下一个节点的位置受该节点是否有右子树影响:若该节点存在右子树,则下一个节点为右子树中的最左子节点;若不存在右子树,则需要向上沿着该节点向上遍历,直到发现第一个是其父节点的左子节点的节点,这个节点的父节点便是中序遍历序列中的下一个节点。
代码:
public TreeNode findNextInInSeq(TreeNode root, TreeNode node){
if(root == null || node == null)
return null;
//若右子节点为空
if(node.right == null){
while(node.parent != null && node == node.parent.right)
node = node.parent;
return node.parent;
}
TreeNode right = node.right;
while(right.left != null)
right = right.left;
return right;
}