23.合并二叉树

题目描述

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会覆盖。你需要将它们合并为一个的二叉树.合并的规则是如果两个节点重叠,那么将它们的值作为节点合并后的新值。否则不为NULL的节点将直接作为新二叉树的节点。

解题思路

深度优先(递归)

假设两个二叉树分别为t1和t2,则可以直接对t1和t2进行深度优先遍历,比较两棵树的每个节点a和b,比较的结果有三种情况:

  1. 若a和b都不为空,则新树的此节点的值为a+b,继续比较下一层。

  2. 若a和b其中一个为空,则新树的此节点为其中的非空节点,无需继续比较。

  3. 若a和b都为空,则新树的此节点为空,无需继续比较。

Code:

class Solution{
    public TreeNode mergeTrees(TreeNode t1,TreeNode t2){
        //情况2
        if(t1 == null){
            return t2;
        }
        //情况2
        if(t2 == null){
            return t1;
        }
        //情况1
        TreeNode ans = new TreeNode(t1.val + t2.val);
        ans.left = mergeTrees(t1.left,t2.left);
        ans.right = mergeTrees(t1.right,t2.right);
        return ans;
    }
}

results matching ""

    No results matching ""