【Lintcode】1126. Merge Two Binary Trees

题目地址:

https://www.lintcode.com/problem/merge-two-binary-trees/description

合并两棵二叉树。合并的意思是,如果两棵树在相同位置都非空,则这个位置的值成为两棵树在此位置的节点之和。否则就是在此位置非空的那棵树在此位置的节点。

思路是递归。如果有一棵树空,则返回那个非空的,否则先合并树根,然后递归合并左右子树。代码如下:

public class Solution {
    /**
     * @param t1: the root of the first tree
     * @param t2: the root of the second tree
     * @return: the new binary tree after merge
     */
    public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
        // Write your code here
        // 有一个是空,则返回非空的那个
        if (t1 == null) {
            return t2;
        } else if (t2 == null) {
            return t1;
        }
        
        // 合并树根
        t1.val += t2.val;
        // 递归合并左右子树
        t1.left = mergeTrees(t1.left, t2.left);
        t1.right = mergeTrees(t1.right, t2.right);
        return t1;
    }
}

class TreeNode {
    int val;
    TreeNode left, right;
    
    public TreeNode(int val) {
        this.val = val;
    }
}

时间复杂度 O ( n ) O(n) O(n),空间 O ( h ) O(h) O(h), n n n为两棵树节点数之和, h h h是两棵树高度更高者的高度。

上一篇:[leetcode/lintcode 题解] Amazon 面试题:滑动窗口内数的和


下一篇:[LintCode] 611. Knight Shortest Path