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

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. 关于Java的特点之继承

    继承--解决之道 继承可以解决代码复用,让我们的编程更加靠近人类思维.当多个类存在相同的属性(变量)和方法时,可以从这些类中抽象出父类(比如刚才的Student),在父类中定义这些相同的属性和方法,所 ...

  2. php优秀框架codeigniter学习系列——CI_Security类学习

    这篇文章主要介绍CI核心框架工具类CI_Security. 安全类包含了一些方法,用于安全的处理输入数据,帮助你创建一个安全的应用.以下选取类中的重点方法进行说明. __construct() 在构造 ...

  3. 第k大元素

    在数组中找到第k大的元素 样例 给出数组[9,3,2,4,8],第三大的元素是4 给出数组 [1,2,3,4,5],第一大的元素是5,第二大的元素是4,第三大的元素是3,以此类推 注意 你可以交换数组 ...

  4. Linux下使用Nginx代理访问json文件报404错误

    在网上看了很多,都说是IIS的问题,关键是使用servlet就可以正常访问,使用Nginx就不行,最后发现是其他问题,解决方案如下: 1.确认配置的路径是否正确,Nginx代理的路径和你访问的路径. ...

  5. Floodlight1.2+Mininet的安装及使用

    直接转载的大神的,亲测Ubuntu16.04版本没问题 https://www.sdnlab.com/19189.html

  6. Deploy Descriptor

    之前我们在编写HelloWorld项目时,在WEB-INF目录下创建了一个web.xml文件.这个文件叫做部署描述文件,每个Servlet应用程序的部署描述文件的名称都是web.xml.Web容器在启 ...

  7. list实现大整数加法

    #include<iostream> #include<list> #include<string> using namespace std; list<in ...

  8. API Gateway : Kong

    what problems 多个服务要写自己的log,auth,对于比较耗时的,有时还要高流量限制. solution intro 单点部署的情况: why not just haproxy log ...

  9. ResourceBundle类的方式来读取config.properties配置文件参数值

    //获取config.properties配置文件参数值 public static ResourceBundle resource = ResourceBundle.getBundle(" ...

  10. requests库(爬虫)

    北京理工大学嵩天老师的课程:http://www.icourse163.org/course/BIT-1001870001 官方文档:http://docs.python-requests.org/e ...