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

二叉树的下一个结点

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

解答:首先如果此题没有空间复杂度要求那就是简单题,思考不用数组的方法,首先输入的不是根结点,而是目标结点,所以第一步得通过next,找到该树的根结点,找根结点之前得把目标结点的val保存到target;然后通过中序遍历开始访问,逻辑写在中间即中序遍历,我们通过一个flag标志来解决先后关系,首先如果root.val==target,即找到目标结点,我们要输出的就是它的下一个结点,此时将flag由0改为1,则到下一个结点时flag==1,则找到输出点,然后重新把flag改为0。时间复杂度分析,其中找根结点为O(n),遍历所有结点为O(n),所以综合时间复杂度为O(n),空间复杂度为O(1)。
class Solution {
public:
    //全局变量
    TreeLinkNode* res;
    int flag=0;
    TreeLinkNode* GetNext(TreeLinkNode* pNode) {
        //输入为空
        if(pNode==NULL)return NULL;
        int target=pNode->val;
        //找到此树的根结点
        while(pNode->next!=NULL){
            pNode=pNode->next;
        }
        //传入根结点和目标值
        dfs(pNode,target);
        return res;
    }
    void dfs(TreeLinkNode* root,int tar){
        if(root==NULL)return;
        dfs(root->left,tar);
        //中序遍历
        //标志为1,代表上一个结点为target
        if(flag==1){
            res=root;
            flag=0;
        }
        //找到target,将标志改为1
        if(root->val==tar){
            flag=1;
        }
        dfs(root->right,tar);
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-08 17:10
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-07 18:05
哈哈哈哈哈感觉朋友找工作的已经疯掉了,直接上图
码农索隆:真老板娘:“我嘞个去,这不我当年的套路吗
点赞 评论 收藏
分享
陆续:不可思议 竟然没那就话 那就我来吧 :你是我在牛客见到的最美的女孩
点赞 评论 收藏
分享
每晚夜里独自颤抖:要求太多的没必要理
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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