/* 题目: 给定一棵二叉树和其中一个节点,找出中序遍历的下一个节点。 */ /* 思路: 两种情况: 节点存在右子树:节点右子树的最左节点; 节点不存在右子树,节点向上一直找父节点或祖父节点,直到其父节点或祖父节点为其双亲节点的左子树,则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; }