题目描述
给定一个二叉树的其中的一个结点(这个节点不一定是root节点),请找出在中序遍历顺序下,该节点的下一个结点;
注意,结点不仅包含指向左右子结点的指针,同时包含指向父结点的指针;
解题思路
1.如果这个节点的右子树不为空,那么该节点的下一个节点就是,右子树的最左节点;
2.如果这个节点的右子树为空,那么,向上找第一个左链接指向,包含该节点的子树的,节点;
private class TreeLinkNode {
int val;
TreeLinkNode left = null;
TreeLinkNode right = null;
TreeLinkNode next = null;
TreeLinkNode(int val) {
this.val = val;
}
}
public TreeLinkNode GetNext(TreeLinkNode pNode) {
if (pNode.right != null) {
TreeLinkNode node = pNode.right;
while (node.left != null) {
node = node.left;
}
return node;
} else {
while (pNode.next != null) {
TreeLinkNode parent = pNode.next;
if (parent.left == pNode) {
return parent;
}
pNode = parent;
}
}
return null;
}