实现一个函数,该函数返回指定节点在中序遍历中的下一个节点。该二叉树节点包含节点值,指向左孩子的指针,指向右孩子的指针,指向父节点的指针。
测试用例:
普通二叉树:完全二叉树,不完全二叉树
特殊二叉树:所有节点都没有左节点的二叉树,所有节点都没有右节点的二叉树,只有一个节点的二叉树,二叉树根节点为空
struct BinaryTreeNode{
int Value;
BinaryTreeNode* left;
BinaryTreeNode* right;
BinaryTreeNode* parent;
};
BinaryTreeNode* GetNext(BinaryTreeNode* pNode)
{
if(pNode==nullptr)
return nullptr;
BinaryTreeNode* pNext;
if(pNode->right!=nullptr)
{
pNext=pNode->right;
while(pNext->left!=nullptr)
pNext=pNext->left;
}
else if(pNode->parent!=nullptr)
{
BinaryTreeNode* current=pNode;
BinaryTreeNode* pParent=pNode->parent;
while(pParent!=nullptr&¤t==pParent->right)
{
pParent=pParent->parent;
current=curren->parent;
}
pNext=pParent;
}
return pNext;
}
如果一个节点t1有右子树,那么他的下一个中序遍历节点就是他的右子树或右子树的左子树直到叶节点;如果一个节点t2没有右子树,那么他的中序遍历的下一个节点就是沿着父节点一直向上找,直到找到一个节点t3,这个节点t3是他父节点t4的左子树,则t4就是所求节点。