这道题想了很久,并没有掌握思想,写了很多,也没有解决。先贴出思考的过程。

class Solution {
public:
vector<TreeNode> v1;
vector<TreeNode> v2; queue<TreeNode> Q1;
queue<TreeNode> Q2; void FloorTree(TreeNode tree, int type)
{
TreeNode node = TreeNode(tree.val);
node.left = tree.left;
node.right = tree.right;
if (type == )
{
Q1.push(node);
while (!Q1.empty())
{
TreeNode livenode = TreeNode();
livenode = Q1.front();
Q1.pop();
v1.push_back(livenode); if (&livenode != NULL && (livenode.left != NULL || livenode.right != NULL))
{
if (livenode.left != NULL)
{
Q1.push(*livenode.left);
}
else
{
TreeNode node = TreeNode();
Q1.push(node);
} if (livenode.right != NULL)
{
Q1.push(*livenode.right);
}
else
{
TreeNode node = TreeNode();
Q1.push(node);
}
}
}
}
else
{
Q2.push(node);
while (!Q2.empty())
{
TreeNode livenode = TreeNode();
livenode = Q2.front();
Q2.pop();
v2.push_back(livenode);
if (&livenode != NULL && (livenode.left != NULL || livenode.right != NULL))
{
if (livenode.left != NULL)
{
Q2.push(*livenode.left);
}
else
{
TreeNode node = TreeNode();
Q2.push(node);
} if (livenode.right != NULL)
{
Q2.push(*livenode.right);
}
else
{
TreeNode node = TreeNode();
Q2.push(node);
}
}
}
}
} TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
FloorTree(*t1, );
FloorTree(*t2, ); int len1 = v1.size();
int len2 = v2.size(); vector<TreeNode> V;
if (len1 <= len2)
{
for (int i = ; i < len1; i++)
{
TreeNode t1 = v1[i];
TreeNode t2 = v2[i];
t1.val += t2.val;
V.push_back(t1);
}
for (int i = len1; i < len2; i++)
{
TreeNode t = v2[i];
V.push_back(t);
}
}
else
{
for (int i = ; i < len2; i++)
{
TreeNode t1 = v1[i];
TreeNode t2 = v2[i];
t2.val += t1.val;
V.push_back(t2);
}
for (int i = len2; i < len1; i++)
{
TreeNode t = v1[i];
V.push_back(t);
}
} for (int i = ; i < V.size(); i++)
{ } TreeNode* N = NULL;
return N;
}
};

下面列出正确的解法。

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {
if (t1 == NULL)return t2;
if (t2 == NULL)return t1;
t1->val += t2->val;
t1->left = mergeTrees(t1->left, t2->left);
t1->right = mergeTrees(t1->right, t2->right);
return t1;
}

补充一个python的实现,和上面的C++的思路基本一样,只是我个人感觉更容易理解一些:

 class Solution:
def mergeTrees(self, t1: 'TreeNode', t2: 'TreeNode') -> 'TreeNode':
if t1!=None or t2!=None:
if t1==None:
t1 = TreeNode(0)
if t2==None:
t2 = TreeNode(0)
t = TreeNode(0)
t.val = t1.val + t2.val
t.left = self.mergeTrees(t1.left,t2.left)
t.right = self.mergeTrees(t1.right,t2.right)
return t return None

leetcode617的更多相关文章

  1. [Swift]LeetCode617. 合并二叉树 | Merge Two Binary Trees

    Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...

  2. Leetcode617.Merge Two Binary Trees合并二叉树

    给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...

  3. leetcode617 Merge Two Binary Trees

    """ Given two binary trees and imagine that when you put one of them to cover the oth ...

  4. LeetCode617. 合并二叉树

    题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && ...

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

    617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...

  6. leetcode_二叉树篇_python

    主要是深度遍历和层序遍历的递归和迭代写法. 另外注意:因为求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中). 所有题目首先考虑root否是空.有的 ...

  7. LeetCode通关:连刷三十九道二叉树,刷疯了!

    分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/youngyangyang04/leetcode-master 大家好,我是拿输出博客来督促自己刷题的老三,这一节我们 ...

随机推荐

  1. virsh命令和虚拟机克隆

    virsh 命令 virsh list  //列出正在运行虚拟机 virsh list --all     //列出所有虚拟机 virsh  console sunhao-1  //进入名字为sunh ...

  2. get 乱码解决方案

    1.针对Post方式提交的请求如果出现乱码,可以每次在request解析数据时设置编码格式: request.setCharacterEncoding("utf-8"); 也可以使 ...

  3. python基础11_函数作用域_global_递归

    看到了一个16进制转换的小知识点,就验证了一下运行结果. #!/usr/bin/env python # coding:utf-8 # 看到了16进制转换的问题.顺便验证一下. a = 255 b = ...

  4. IO调度算法的理解(转载)

    IO调度器(IO Scheduler)是操作系统用来决定块设备上IO操作提交顺序的方法.存在的目的有两个,一是提高IO吞吐量,二是降低IO响应时间.然而IO吞吐量和IO响应时间往往是矛盾的,为了尽量平 ...

  5. js判断是刷新页面还是关闭页面

    <body onunload=fclose() onload=fload() onbeforeunload=bfunload()> <script> var s = " ...

  6. 本地sh脚本创建以及利用ssh server远程运行sh脚本

    想要同时运行多个非本地的sh脚本,用来实现运行同一网段下多机程序的集成,可以通过在每台机器上写sh脚本,再在本机上运行一个启动远程机器sh的脚本 首先需要在所有机器上安装openssh-server ...

  7. OneStopEnglish corpus: A new corpus for automatic readability assessment and text simplification-paper

    这篇论文的related work非常详尽地介绍了各种readability的语料 abstract这个paper描述了onestopengilish这个三个level的文本语料的收集和整理,阐述了再 ...

  8. yii2 自带分页使用

    //下面为控制器层的方法内容use \yii\db\Query;use \yii\data\Pagination; //方法内容        $query=new Query();//from为自带 ...

  9. python第三方模块的导入

    模块搜索路径 当我们尝试加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错: >>> import module1 Traceback (most ...

  10. 【java多线程】队列系统之DelayQueue源码

    一.延迟队列 延迟队列,底层依赖了优先级队列PriorityBlockingQueue 二.延迟队列案例 (1)延迟队列的任务 public class DelayTask implements De ...