leetcode-day04-10:合并二叉树

思路:
有两棵树,然后相同节点对应相加求和,空节点的话则表示为0,则表示X+0即可。
那么对于树这样的结构应该怎么做到对应的节点对应相加。是该先遍历树存储,还是怎么?
解答:
两棵树同时进行前序遍历,并将对应的节点进行合并。在遍历时,如果两棵树的当前节点均不为空,我们就将它们的值进行相加,并对它们的左孩子和右孩子进行递归合并;如果其中有一棵树为空,那么我们返回另一颗树作为结果;如果两棵树均为空,此时返回任意一棵树均可(因为都是空)。

前序遍历:前序遍历就是先输出根节点,然后左孩子,最后右孩子;
伪代码:

void preorder_traverse(const struct bi_tree *tree)
{ 
   if(tree){
       access(tree->data);//根节点
		if(tree->left){
               preoder_traverse(tree->left);//左子树
               }
               if(tree->right){
                 preoder_traverse(tree->right);//右子树
                 }
       }
}

递归代码实现合并二叉树:

`public class Solution{
         public TreeNode mergeTree(TreeNode t1,TreeNode t2){
         if(t1==null)
              return t2;
              if(t2==null)
              return t1;//选择T1作为合并的树
              t1.val+=t2.val;
              t1.left=mergeTrees(t1.left,t2.left);//分别对左子树,右子树进行合并
              t1.right=mergeTrees(t1.right,t2.right);
              return t1;
              }
     }`

时间复杂度:
时间复杂度:O(n),其中 n 是两棵树中节点个数的较小值。

空间复杂度:O(n),在最坏情况下,会递归 n 层,需要 O(n)的栈空间。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值