/*
题目:
给定一棵二叉树和其中一个节点,找出中序遍历的下一个节点。
*/
/*
思路:
两种情况:
节点存在右子树:节点右子树的最左节点;
节点不存在右子树,节点向上一直找父节点或祖父节点,直到其父节点或祖父节点为其双亲节点的左子树,则next节点为父节点或祖父节点,若没有找到,则无next节点。
*/
struct TreeNode{
int value;
TreeNode* left;
TreeNode* right;
TreeNode* parent;
}
BinaryTreeNode* GetNext(BinaryTreeNode* pNode){
if(pNode == null) return null;
BinaryTreeNode* targetNode = pNode;
if(targetNode->right != null){
targetNode = targetNode->right;
while(targetNode->left != null){
targetNode = targetNode->left;
}
}else if(targetNode->parent != null){
targetNode = targetNode->parent;
while(targetNode != null && targetNode->parent->right == target){
targetNode = targetNode->parent;
}
if(targetNode != null){
targetNode = targetNode->parent;
}
return targetNode;
}