合并二叉树_字节跳动/小米/百度笔试编程C/C++

 

今天手顺,又AC一题,又是一道二叉树题。话不多说,上

 

题目描述

已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。例如:

两颗二叉树是:

Tree 1 

     1  

    / \  

   3   2

  /     

 5  

   

Tree 2

   2

  / \

 1   3

  \   \

   4   7

 

合并后的树为

    3

   / \

  4   5

 / \    \

5  4    7

 

读题,感觉有好多场景要讨论啊,再一读题,这不就是简单加法题么?!一步思路一步代码,带你两步搞定

 

一步思路

题目来来回回、絮絮叨叨,其实就是想让我们做树形加法

 

一步代码

按照先序遍历的方式,递归做树形加法,并注意对空节点的处理。

这个代码的精妙之处,在于t1、t2本身是否为空的判断,和省略了t1、t2子树是否为空的判断。

/**
 * struct TreeNode {
 *	int val;
 *	struct TreeNode *left;
 *	struct TreeNode *right;
 * };
 */

class Solution {
public:
    /**
     * 
     * @param t1 TreeNode类 
     * @param t2 TreeNode类 
     * @return TreeNode类
     */
    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
        // write code here
        TreeNode *root;
        TreeNode *t1_newl = NULL;/*t1的左子树*/
        TreeNode *t1_newr = NULL; /*t1的右子树*/
        TreeNode *t2_newl = NULL; /*t2的左子树*/
        TreeNode *t2_newr = NULL; /*t2的右子树*/        
        if((t1 == NULL)&&(t2 == NULL))/*t1 t2均为空*/
        {
            root = NULL;
        }
        else
        {
            root = new TreeNode(NULL);
            root->val = 0;
            if(t1 != NULL)
            {
                root->val += t1->val;/*加上t1的值*/
                t1_newl = t1->left;
                t1_newr = t1->right;
            }
            if(t2 != NULL)
            {
                root->val += t2->val; /*加上t2的值*/
                t2_newl = t2->left;
                t2_newr = t2->right;
            }
            root->left = mergeTrees(t1_newl, t2_newl);/*针对左子树,调用递归函数*/
            root->right = mergeTrees(t1_newr, t2_newr); /*针对右子树,调用递归函数*/
        }
        
        return root;
    }
};

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值