二叉树的下一个节点(非递归)

二叉树的下一个结点

http://www.nowcoder.com/questionTerminal/9023a0c988684a53960365b889ceaf5e

  • 当前节点不存在右子树,且该节点为父节点的右孩子,递归一样找父节点的中序遍历的下一个节点。
    满足这样的条件就是该节点为父节点的右孩子。
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if (!pNode) {
            return pNode;
        }

        // 当前节点有右子树 下一个节点是右子树中序遍历的第一个节点,即下一个节点就是右孩子的最左孩子结点。
        if (pNode->right) {
            pNode = pNode->right;
            while (pNode->left) {
                pNode = pNode->left;
            }
            return pNode;
        }

        // 当前节点不存在右子树,且该节点为父节点的右孩子,递归一样找父节点的中序遍历的下一个节点。满足这样的条件就是该节点为父节点的右孩子。
        // 当前节点不存在右子树,且该节点为父节点的左孩子,直接就是其父亲节点。
        while (pNode->next) {
            TreeLinkNode *root = pNode->next;
            if (root->left == pNode) {
                return root;
            }
            pNode = pNode->next;
        }

        return nullptr;
    }
};
全部评论

相关推荐

nus2201602...:兄弟,你这个简历撕了丢了吧,就是一坨,去找几个项目,理解项目流程,看几遍就是你的了,看看八股就去干了,多看看牛客里别人发出来的简历,对着写,你这写的啥啊,纯一坨
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务