leetcode617
这道题想了很久,并没有掌握思想,写了很多,也没有解决。先贴出思考的过程。
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的更多相关文章
- [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 ...
- Leetcode617.Merge Two Binary Trees合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...
- leetcode617 Merge Two Binary Trees
""" Given two binary trees and imagine that when you put one of them to cover the oth ...
- LeetCode617. 合并二叉树
题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && ...
- LeetCode 617. 合并二叉树(Merge Two Binary Trees)
617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...
- leetcode_二叉树篇_python
主要是深度遍历和层序遍历的递归和迭代写法. 另外注意:因为求深度可以从上到下去查 所以需要前序遍历(中左右),而高度只能从下到上去查,所以只能后序遍历(左右中). 所有题目首先考虑root否是空.有的 ...
- LeetCode通关:连刷三十九道二叉树,刷疯了!
分门别类刷算法,坚持,进步! 刷题路线参考:https://github.com/youngyangyang04/leetcode-master 大家好,我是拿输出博客来督促自己刷题的老三,这一节我们 ...
随机推荐
- C# 引用类型公共变量的影响
public int[] a =new int[2]; private void button1_Click(object sender, EventArgs e) { bing(a); } priv ...
- 新建虚拟机并与XShell连接(配置网卡)
新建虚拟机并与XShell连接 一.新建虚拟机 下一步 下一步 选择CentOS版本,我的CentOS镜像是6.5版本64位,所以我选择CentOS 6 64. 然后点击下一步 可以自行更改位置,然后 ...
- httpd does not appear to be running and proxying cobbler, or SELinux is in the way.
当我们执行cobbler check时,出现这种错误:httpd does not appear to be running and proxying cobbler, or SELinux is i ...
- CSS精简工具——除去多余的css样式
有时候开发网页中在改版之后,存在很多无意义的样式,对于后期的管理和维护很不友好. 如果手动去删除,很可能会导致出现更混乱的问题. 最近找到一个Chrome插件,CSS remove and combi ...
- Python学习之路基础篇--02Python基础+小作业
1 变量 变量就是将一些运算的中间结果暂存到内存中,以便后续代码调用.必须由数字,字母,下划线任意组合,且不能数字开头.不能是python中的关键字,如['and', 'as', 'assert', ...
- python 的排名,已经python的简单介绍
我在今天看了一篇文章,是简书的全网程序猿写的,Java已经退出神坛,python稳居第一. python是由龟叔写的,它在英文的意思是蟒蛇. 根据编程语言流行指数排行榜2019年2月的榜单 据了解,目 ...
- Python之os模块和sys模块
OS模块:print(os.getcwd())os.chdir('..') #返回上一层目录print(os.getcwd()) os.makedirs('xxxx') #生成多级递归目录os.mkd ...
- linux下不能拼通www.baidu.com
1.打开虚拟机,通过命令修改内容如下 vi /etc/sysconfig/network-scripts/ifcfg-eth0 2.将信息修改如下: 3.ping www.baidu.com 查看是否 ...
- vue调用支付接口
html: <div class="paymentHtml" v-html="paymentHtml"></div> script: d ...
- 解决WPF中异常导致的程序Crash
通常在WPF中出现异常,会导致程序Crash,即使把异常Throw出来,依旧会报错,解决方法只需在App.xaml.cs中进行处理即可,废话不说,代码如下: private int exception ...