牛客——二叉树的下一个结点

题目描述
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。
题解:中序遍历是左中右
分两种情况:
①pNode的右子树为空,则向上回溯,直到找到该结点的左子结点与当前结点是同一结点,则该结点即为pNode的下一个结点
②pNode的右子树不为空,则向下遍历,找到pNode的右结点的左叶子结点

在这里插入图片描述

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if (pNode == NULL || (pNode->left==NULL && pNode->right==NULL && pNode->next==NULL))
            return NULL;
        if (pNode->right == NULL)
        {
            while (pNode->next && pNode->next->left != pNode)
                    pNode = pNode->next;
            return pNode->next;
        }
        else if (pNode->right)
        {
            pNode = pNode->right;
            while (pNode->left)
                pNode = pNode->left;
            return pNode;
        }
    }
};
发布了315 篇原创文章 · 获赞 119 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/w144215160044/article/details/104917890