[LeetCode] 617.Merge Two Binary Trees

来源:互联网 发布:excel数据透视表命名 编辑:程序博客网 时间:2024/06/06 05:41

[LeetCode] 617.Merge Two Binary Trees

  • 题目描述
  • 解题思路
  • 实验代码

题目描述

Given two binary trees and imagine that when you put one of them to cover the other, some nodes of the two trees are overlapped while the others are not.

You need to merge them into a new binary tree. The merge rule is that if two nodes overlap, then sum node values up as the new value of the merged node. Otherwise, the NOT null node will be used as the node of new tree.

Example:

Input:
  Tree 1     Tree 2
   1       2
   /  \     /  \
  3  2    1     3
  /         \   \
  5       4   7
Output:
Merged tree:
   3
  /  \
 4   5
/  \   \
5   4  7

解题思路

这道题难度不大,就是要将两个二叉树合并,所谓合并就是将两个二叉树对应节点的值加起来作为新的二叉树的对应节点的值。这道题的重点是每次递归和加值的时候都要判断两个二叉树的相应节点是否是空节点,注意好这点以后这道题就能很容易解决。

实验代码

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {        if (t1 == NULL && t2 == NULL) return NULL;        TreeNode* t = new TreeNode((t1 ? t1->val : 0) + (t2 ? t2->val : 0));        t->val = (t1 ? t1->val : 0) + (t2 ? t2->val : 0);        t->left = mergeTrees((t1 ? t1->left : NULL), (t2 ? t2->left : NULL));        t->right = mergeTrees((t1 ? t1->right : NULL), (t2 ? t2->right : NULL));        return t;    }};