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 大家好,我是拿输出博客来督促自己刷题的老三,这一节我们 ...
随机推荐
- 带通滤波 matlab
巴特沃斯:1.带阻滤波器设计带阻滤波器指标:阻带上边界频率:5Kz:阻带下边界频率:7Kz:通带上边界频率:2Kz:通带下边界频率:9Kz:通带最大衰减:1dB:阻带最小衰减:20dB:设计程序如下: ...
- 2017年4月12日16:53:54 mysql 还有没看过的命令,spring boot rabbitmq的几种应用场景,mybaties的几种句柄及其映射规则
ON DUPLICATE KEY UPDATE rabbitmq:http://www.cnblogs.com/ityouknow/p/6120544.html http://blog.cs ...
- linux do{} while(0)
do{}while(0) 在linux中,经常会看到do{}while(0)这样的语句,许多人开始都会疑惑,认为do{}while(0)毫无意义,因为它只会执行一次,加不加do{}while(0)效果 ...
- RPi 3B Aduio 3.5mm output
/********************************************************************** * RPi 3B Aduio 3.5mm output ...
- sqlite数据库操作
1.创建表 import sqlite3 conn = sqlite3.connect('C:\\Users\\Kuma\\Desktop\\spider.db') print('connect su ...
- JAVA高级篇(二、JVM内存模型、内存管理之第一篇)
JVM内存结构如 Java堆(Heap),是Java虚拟机所管理的内存中最大的一块.Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建.此内存区域的唯一目的就是存放对象实例,几乎所有的对象实 ...
- Windows安装Anaconda出现failed to create menus
当出现上述问题时,有以下的解决办法: (1)默认安装,即一直next: (2)安装路径里不要包含英文以外的语言,即安装路径全部用英文命名: (3)先不要安装python,或者将安装的python配置好 ...
- Concordion test
reference documents http://concordion.org/Example.html
- oracle删除当前用户以及当前用户所有表、索引等操作
ORACLE删除当前用户下所有的表的方法 如果有删除用户的权限,则可以: drop user user_name cascade; 加了cascade就可以把用户连带的数据全部删掉.删除后再创建该用户 ...
- java 获取键盘输入常用的两种方法
java 获取键盘输入常用的两种方法 方法1: 通过 Scanner Scanner input = new Scanner(System.in); String s = input.nextLine ...