二叉树的下一个结点

二叉树的下一个结点

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

中序遍历
左子结点 - 父节点 - 右子结点

先看有没有右子结点,右子节点有没有左子结点,
再看有没有比他大的父节点
就可以了

class Solution {
public:
    TreeLinkNode* GetNext(TreeLinkNode* pNode)
    {
        if(pNode->right)//还有右子节点
        {
            pNode = pNode->right;//移动到右子节点
            while(pNode->left)//有左子节点,移动到左子节点
            {
                pNode = pNode->left;
            }
            return pNode;//返回该节点
        }
        else//没有右子节点,寻找最近一个比该节点大的祖先节点
        {
            while(pNode->next)
            {
                if(pNode->val < pNode->next->val)
                {
                    return pNode->next;
                }
                pNode = pNode->next;
            }
        }
        return NULL;//没有右子节点,没有比他大的祖先节点,则该点为最右叶子节点,没有下一个节点,返回NULL
    }
};
全部评论

相关推荐

努力的小明a:项目看着很眼熟,施磊老师吧,我也学的这个😋我当时是把rpc框架做成了一个分布式网盘,这是一个项目,然后muduo库做成集群即时通讯,又用QT做了个交互的客户端,这样又一个项目,然后一个轻量redis,一个CAD,总共四个项目,投了三个月就今天2月份一个小厂Qt offer,然后后面想开了,Qt啥的都能干,这个月get了个北京大厂的offer,做java后端,人生就是这么魔幻,现在就在去北京入职的路上
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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