递归方式轻松搞定二叉树合并算法

这个题怎么解决?在Java —— 一文理解递归与二叉树遍历_行吟天涯的博客-CSDN博客这篇文章中写到过,递归考虑的就是递推公式和终止条件的判断。

怎么合并这两棵树呢?其实,二叉树所有的递归都类似于根节点-左子树-右子树的模式,这里也不例外。

以两棵树的根节点相加值创建新节点;然后把两个根节点的左子树合并,连在新节点的left上;再把两个根节点的右子树合并,连在新节点的right指针上。显然合并左子树也是这个流程,根节点相加,左右子树合并再连接......这样一直递归,到什么时候结束呢?

以上图为例,Tree1的3节点右侧为null,所以合并对应位置的树时,就可以直接将Tree2对应位置的树直接移植过来,也就是说,当根节点为null时,合并就直接完成了——合并结果是对应位置的另一棵树。

所以我们得出如下代码:

public static TreeNode mergeTree(TreeNode t1,TreeNode t2){
    //一样是递归的思路。要合并两颗二叉树怎么弄呢?先将根节点的值相加并创建一个新的节点;
    //然后合并t1、t2的左子树并把它连接到新的根节点上;再合并两棵树的右子树并把它连接到新的根节点上。
    //什么时候是终止条件?如果一棵树已经为null的话,那么可以说,合并的结果就是另一棵树,方法完成,并将这棵树作为结果返回连接在父节点的指针域上。
    if (t1 == null){
        return t2;
    }
    if (t2 == null){
        return t1;
    }
    //如果都不为null,先合并根节点再合并左右子树
    TreeNode node = new TreeNode(t1.val + t2.val);
    node.left = mergeTree(t1.left,t2.left);
    node.right = mergeTree(t1.right,t2.right);
    return node;
}

这就是递归处理二叉树合并的解法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值