题解 | #合并二叉树#
合并二叉树
http://www.nowcoder.com/practice/7298353c24cc42e3bd5f0e0bd3d1d759
题目描述:已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。
例如:两颗二叉树是:
*Tree 1 *
1
/ \
3 2
/
5
Tree 2
2
/ \
1 3
\ \
4 7
合并后的树为
3
/ \
4 5
/ \ \
5 4 7
示例1:
输入:{1,3,2,5},{2,1,3,#,4,#,7}
返回值:{3,4,5,5,4,#,7}
思路:顾名思义,合并两棵二叉树,将对应位置的节点值相加即可,使用递归无疑是最为简单直接的方式了,要合并两棵二叉树就要分别合并这两棵二叉树对应的左右子树。具体代码如下:
/** * struct TreeNode { * int val; * struct TreeNode *left; * struct TreeNode *right; * }; */ class Solution { public: /** * * @param t1 TreeNode类 * @param t2 TreeNode类 * @return TreeNode类 */ TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { // write code here if(t1 == NULL && t2 == NULL) return NULL; if(t1 == NULL && t2 != NULL) return t2; if(t1 != NULL && t2 == NULL) return t1; TreeNode *root = (TreeNode*)malloc(sizeof(TreeNode)); root->val = t1->val + t2->val; root->left = mergeTrees(t1->left,t2->left); root->right = mergeTrees(t1->right,t2->right); return root; } };