【LeetCode】617. 合并二叉树

算法现在就是大厂、外企的硬指标。开发、测开、测试,想往上总是绕不开的。

题目描述

难度:【简单】 标签:【二叉树】

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。

你需要将他们合并为一个新的二叉树。

合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,
否则不为 NULL 的节点将直接作为新二叉树的节点。

题目地址:https://leetcode-cn.com/problems/merge-two-binary-trees/description/

示例

输入: 
	Tree 1                     Tree 2                  
          1                         2                             
         / \                       / \                            
        3   2                     1   3                        
       /                           \   \                      
      5                             4   7                  
输出: 
合并后的树:
	     3
	    / \
	   4   5
	  / \   \ 
	 5   4   7

注意: 合并必须从两个树的根节点开始。

解题

合并必须从两个树的根节点开始。按照套路来,首先想好当前节点要做的事情,然后剩下的事情交给递归,不要陷入递归细节。

那么当前传入的 2 个节点,就是相互比较,有 3 种情况:

  • root1 == null && root2 == null,都为空 null,直接返回 null
  • root1 == null || root2 == null,其中一个为 null,返回另一个不为空的节点
  • 剩下就是2个都不为空,那么就把两个值相加,赋值给新的节点
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if (root1 == null && root2 == null) {
            return null;
        }
        if (root1 == null) {
            return root2;
        }
        if (root2 == null) {
            return root1;
        }
        // 都不为空,就进行相加,创建一个新的节点
        TreeNode newNode = new TreeNode(root1.val + root2.val);
        // 前序遍历框架部分,分布递归2个节点的左孩子和右孩子
        newNode.left = mergeTrees(root1.left, root2.left);
        newNode.right = mergeTrees(root1.right, root2.right);
        return newNode;
    }
}
posted @ 2021-11-30 22:27  把苹果咬哭的测试笔记  阅读(30)  评论(0编辑  收藏  举报