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

二叉树的下一个结点

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

题目给定结点,求按照中序遍历的顺序,它的下一个结点是什么,除了left和right指针外,还是指向父结点的next指针。
最容易想到的暴力解法:
1、根据next,找到根结点;
2、递归获得中序遍历序列;
3、找到给定的结点,输出下一个结点即可;

改进解法(我之前没注意pNode是给定结点,一直以为是根结点,浪费了大量时间)
找规律:
1、若右孩子存在,找右孩子中最左边的结点,没有则返回右孩子;
2、若右孩子不存在,那么就需要考虑父结点问题,父结点又分为左孩子和右孩子,两者是不一样的。若是父结点的左孩子,那么它的下一个结点为父结点,若不是,那么根据中序遍历,当前父结点已经遍历过了,只能向上找父结点的父结点。重复上述过程;
3、若是尾结点,输出nullptr;
代码:

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        if(!pNode)
            return NULL;

        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;
    }
};
全部评论

相关推荐

dongsheng66:如果想进大厂的话,在校经历没必要占这么大篇幅,可以把专业技能单独放一个专栏写,可以加个项目经历
点赞 评论 收藏
分享
11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务