LeetCode 617. 合并二叉树

基本思路

  1. 判断t1和t2是否为空,给val赋值并赋值
  2. 分别递归t1,t2左节点和t1,t2右节点
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        TreeNode newtree = null;
        int val = 0;
        
        if(t1 != null && t2 != null){
            val = t1.val + t2.val;
            newtree = new TreeNode(val);
            
            newtree.left = mergeTrees(t1.left, t2.left);
            newtree.right = mergeTrees(t1.right, t2.right);
        } else if( t1 != null){
            newtree = new TreeNode(t1.val);
            
            newtree.left = mergeTrees(t1.left, null);
            newtree.right = mergeTrees(t1.right, null);
        }else if( t2 != null){
            newtree = new TreeNode(t2.val);
            
            newtree.left = mergeTrees(null, t2.left);
            newtree.right = mergeTrees(null, t2.right);
        }else{
            newtree = null;
        }
        return newtree;
    }
}

改进

无需新建一个树去存放结果,在t1上操作合并递归即可

class Solution {
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        if (t1 == null) {
            return t2;
        }
        if (t2 == null) {
            return t1;
        }
        // 节点的值合并
        t1.val = t1.val + t2.val;
        // 继续
        t1.left =  mergeTrees(t1.left, t2 != null ? t2.left : null);
        t1.right = mergeTrees(t1.right, t2 != null ? t2.right : null);
        return t1;
    }
}

猜你喜欢

转载自blog.csdn.net/u014239185/article/details/85235934