leadcode的Hot100系列--617. 合并二叉树

合并,就是两个树的结构交集部分,数据相加,否则,取非空部分。
所以,这里相当于是对两棵树同时遍历:
如果两棵树节点都不为空,则数据相加,
否则,直接指针把不为空的节点复制过来。

注:这里没有申请内存,而直接对原有的树进行改造,这样可以节省申请内存的时间,且节省一些内存。

struct TreeNode* mergeTrees(struct TreeNode* t1, struct TreeNode* t2){

    struct TreeNode *pTemp = NULL;

    if ((NULL == t1) && (NULL == t2))
        return NULL;
    else if ((NULL != t1) && (NULL != t2))
    {
        pTemp = t1;
        pTemp->val = t1->val + t2->val;
    }
    else if (NULL != t1)
    {
        return t1;
    }
    else if (NULL != t2)
    {
        return t2;
    }
    pTemp->left = mergeTrees(t1->left, t2->left);
    pTemp->right = mergeTrees(t1->right, t2->right);

    return pTemp;

原文地址:https://www.cnblogs.com/payapa/p/11111967.html

时间: 2024-08-30 14:33:30

leadcode的Hot100系列--617. 合并二叉树的相关文章

leadcode的Hot100系列--226. 翻转二叉树

这玩意儿基本上还是遍历的那一套, 这里使用先序遍历的方式,直接对左右子树进行对调即可. (虽然看题目的时候,感觉都一样,但真正写出来之后,印象还是深刻了很多) struct TreeNode* invertTree(struct TreeNode* root){ struct TreeNode *pTemp = NULL; if (NULL == root) return NULL; pTemp = root->left; root->left = root->right; root-&

Leetcode 617.合并二叉树

合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点. 示例 1: 输入: 输出: 合并后的树: 注意: 合并必须从两个树的根节点开始. 1 /** 2 * Definition for a binary tree node. 3 * public class TreeNode { 4 * int

leadcode的Hot100系列--136. 只出现一次的数字

因为之前刚写了461号题目,这个题目与那个很相似, 461号题目用异或来算两个不一样的部分, 那这个题目需要排除一样的部分,并找到不一样的部分. 那么可以再利用一下异或的特性: 1.相同为0,所以,a ^ a = 0. 2.不同为0,所以,0 ^ b = b. 所以,假设数组里面的数分别就是 a,a,b, ---> a ^ a ^ b = b,那么b就是要找的那个不一样的数字. (异或的最终结果与异或的顺序无关,即 a ^ b ^ c = a ^ c ^ b = b ^ c ^ a ). 附上代

leadcode的Hot100系列--461. 汉明距离

求两个数的二进制位不同的位置,最先想到的就是异或操作, 异或:按位运算,相同为0,不同为1. 比如: a = 6 对应的二进制表示为: 0 0 1 1 1 ? b = 9 对应的二进制表示为: 0 1 0 0 1 则 a ^ b = 14 对应的二进制表示为: 0 1 1 1 0 所以,只要算出异或之后的数的二进制表示方法里面1的个数. 比如,对于上面的异或之后为14,14的二进制里面1的个数为3,那么汉明距离就是3. 想知道是否有1,最快的当然还是位与操作, 与:按位运算,相当于乘法,0与0是

leadcode的Hot100系列--155. 最小栈

栈:先入后出,后入先出 像电梯一样,先进入电梯的,走到电梯最深处,后进入电梯的,站在电梯门口, 所以电梯打开的时候,后进入的会先走出来,先进入的会后走出来. push,对应入电梯,把数据往里面压 pop, 对应出电梯,把数据往外拿 栈顶,对应电梯门口 栈底,对应电梯最深处 这里使用链表实现栈. 先创建一个MinStack头, 入栈:直接把结构体挂在MinStack头后面, 出栈:直接拿出MinStack头后面的结构体. 取最小值:对链表进行一次遍历,返回最小值. typedef struct m

leadcode的Hot100系列--62. 不同路径--简单的动态规划

题目比较清晰,简单来说就是: A B C D E F G H I J K L 只能往右或者往下,从A到L,能有几种走法. 这里使用动态规划的方法来做一下. 动态规划最重要的就是动态方程,这里简单说下这个动态方程怎么做出来的吧. 记 f(B) 为 A到B总共可以有的走法. 想知道f(L),那其实只要知道f(H)和f(K)就可以了. 因为从A到H之后,再想到L就只有一种方法,AK同理,所以 f(L) = f(H) + f(K). 那f(H)呢,就等于 f(D)+f(G),这里就很容易得到他的动态方程

LeetCode 617. Merge Two Binary Trees合并二叉树 (C++)

题目: 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,

leetcode.617 合并两个二叉树

题目描述:给予两个二叉树  t1 , t2  ,合并他们. 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 t

[LeetCode] 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