BM32. [合并二叉树]

alt

https://www.nowcoder.com/exam/oj?tab=%E7%AE%97%E6%B3%95%E7%AF%87&topicId=295

BM32. 合并二叉树

同理上面介绍了双树问题,我们从上到下同时前序遍历两个二叉树不就完成了合并成为一个新二叉树,另外这道题目有没有让你想起合并两个排序链表,二叉树可以退化为链表,所以这个题目的特殊情况就是合并链表

合并的规则进行模拟:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替,都为空的节点进行返回

不多说直接进行处理

public TreeNode mergeTrees (TreeNode t1, TreeNode t2) {
        //如果两个节点都是空的那就返回null
        if(t1 == null && t2 == null)
            return null;
        int value1 = t1 == null? 0 : t1.val;
        int value2 = t2 == null? 0 : t2.val;
        TreeNode cur = new TreeNode(value1 + value2);
        //和链表一样特殊的集中处理按照题意处理即可
        if(t1 == null && t2 != null){
            cur.left = mergeTrees(null, t2.left);
            cur.right = mergeTrees(null, t2.right);
        }
        if(t1 != null && t2 == null){
            cur.left = mergeTrees(t1.left, null);
            cur.right = mergeTrees(t1.right, null);
        }
        if(t1 != null && t2 != null){
            cur.left = mergeTrees(t1.left, t2.left);
            cur.right = mergeTrees(t1.right, t2.right);
        }     
        return cur;
    }

复杂度分析

  • 时间复杂度:O(n),二叉树前序遍历的时间复杂度
  • 空间复杂度:O(n),新建一个二叉树进行返回

alt

#面经##题解##面试题目#
全部评论

相关推荐

当年还在美团那个倒霉的 Peppr 团队工作时,我一直有个疑问:这群人每天到底在自嗨什么。每次开会一堆人围着一堆“看起来很高级”的文档转,模板统一、名词复杂、页数感人,每一页都在暗示一件事:“你不懂,是因为你不专业。”但现实是——代码照样写在 💩 山上,该出问题还是会出问题,这真的很逗,系统一出问题,文档的唯一作用就是证明:“我们当初确实认真写过文档。”所以本质区别到底是什么?是代码质量提升了,还是大家在精神层面完成了一次“工程师 cosplay”?有句话说得好潮水退去才知道谁在裸泳。还记得当时的马哥、明哥(图 1 左)最爱反复强调一句话:“所有场景一定要想到。”、“这个场景为什么没考虑到?”不过他们这些话我是真的听进去了。不然我也不会在一年多前就说:这个项目活不过两年。顺带一提,那段时间还有个固定节目。每次下楼,总能听见我明哥在吐槽不同的人。我从他身后绕过去,经常能听到他一边抽烟一边说:“xx 这小子太坑了,回头我一定要跟马哥说说。”于是深谙人情世故但真不会抽烟的我也会从口袋掏出一支低尼古丁含量的烟给自己点上,假意自己什么都没听到什么都不知道,只是来抽烟的。后来我才明白,这可能也是团队文化的一部分:问题永远在别人身上,而我们,永远在复盘里😂。
秋招白月光
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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