【LeetCode笔记】617. 合并二叉树(Java、DFS、二叉树)

题目描述

  • 貌似是面试高频题,显而易见的递归。
    在这里插入图片描述

思路 & 代码

  • 合并两棵树,先不考虑特殊情况,可以理解成:根结点合并,然后各自的左右子树继续进行合并操作。
  • 那么递归返回值肯定是当前函数根结点
  • 特殊情况:两棵树都为空、其中一颗为空。
/**
 * 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 || root2 == null){
            return root2 == null ? root1 : root2; 
        }

        // 继续合并的情况
        root1.val += root2.val;
        root1.left = mergeTrees(root1.left,root2.left);
        root1.right = mergeTrees(root1.right,root2.right);
        return root1;
    }
}

更新版

  • 感动,能感受到有点进步
class Solution {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        if(root1 == null) {
            return root2;
        }
        if(root2 == null) {
            return root1;
        }
        root1.val += root2.val;
        root1.left = mergeTrees(root1.left, root2.left);
        root1.right = mergeTrees(root1.right, root2.right);
        return root1;
    }
}

版权声明:本文为qq_45108415原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。