题解 | #二叉树的下一个结点#

二叉树的下一个结点

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

根据中序遍历的规则,可以知道,当该结点有右子树时,返回其右子树最左边的结点。当该结点没有右子树时,则需要向上寻找第一个其左子树中包含该结点的结点。
根据这两种需求,分别写两个函数,一个通过递归找最左边的子结点,一个通过递归找向上第一个在左子树中包含该结点的点。
根结点由于其next域为空所以需要做特殊处理。

/*
struct TreeLinkNode {
    int val;
    struct TreeLinkNode *left;
    struct TreeLinkNode *right;
    struct TreeLinkNode *next;
    TreeLinkNode(int x) :val(x), left(NULL), right(NULL), next(NULL) {
        
    }
};
*/
class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(!pNode){
            return pNode;
        }
        if(!pNode->left && !pNode->right && !pNode->next){
            return nullptr;
        }
        if(!pNode->next){
            if(!pNode->right){
                return nullptr;
            }
            return findLeft(pNode->right); 
        }
        if(!pNode->right){
            if(pNode->next->left == pNode){
                return pNode->next;
            }
            else{
                return findNext(pNode);
            }
        }
        else{
            return findLeft(pNode->right);
        }
    }
    TreeLinkNode* findLeft(TreeLinkNode* &p){
        if(!p->left){
            return p;
        }
        return findLeft(p->left);
    }
    TreeLinkNode* findNext(TreeLinkNode* p){
        if(!p->next){
            return nullptr;
        }
        if(p->next->right == p){
            return findNext(p->next);
        }
        return p->next;
    }
};
全部评论

相关推荐

03-04 07:14
门头沟学院 C++
黑皮白袜臭脚体育生:老板:都给工作机会了还想要工资,哪来这么多好事
点赞 评论 收藏
分享
AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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