leetcode 617. 合并二叉树 思考分析

题目

给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。
你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。
在这里插入图片描述

思路1:递归遍历两棵树,构造一棵新的树

1、递归参数以及返回值
返回值:新树的结点
参数:两棵旧树
2、终止条件
两棵旧树的对应的该结点都为NULL
3、逻辑(这里直接贴代码和遇到的问题)
首先将情况分为4类:
如果t1 和t2 都是空结点,那么说明新树的这个结点也是NULL
如果t1 t2中一个位空一个不为空,我们可以直接将其中不为空的一个结点的信息直接传给新结点
如果t1 t2全部存在,那么将结点值相加,传给新结点。
注意当进行递归调用traversal时:
traversal(t1->left,t2->left);:必须要保证t1、t2都不为空,否则编译器会报错。
member access within null pointer of type 'TreeNode'

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}* };*/
class Solution {
public:TreeNode* traversal(TreeNode* t1, TreeNode* t2){if(t1 == NULL && t2 == NULL) return NULL;int rootVal=0;if(t1 ==NULL && t2!=NULL) {rootVal = t2->val;TreeNode* NewRoot = new TreeNode(rootVal);NewRoot->left = t2->left;NewRoot->right = t2->right;return NewRoot;}else if(t1 !=NULL && t2==NULL){rootVal = t1->val;TreeNode* NewRoot = new TreeNode(rootVal);NewRoot->left = t1->left;NewRoot->right = t1->right;return NewRoot;} else{rootVal = t1->val + t2->val;TreeNode* NewRoot = new TreeNode(rootVal);NewRoot->left = traversal(t1->left,t2->left);NewRoot->right = traversal(t1->right,t2->right);return NewRoot;} }TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {return traversal(t1,t2);}
};

在这里插入图片描述

思路2:层序遍历两棵树,构造一棵新的树

在LeetCode 101. 对称二叉树 思考分析中,有过利用队列同时遍历两棵树的经历,这里回顾了一下,然后直接上。
这里完全是基于t1来的,当不重叠的时候,直接将t2的结点直接作为t1的节点,结点与孩子的关系也被传给t1了。

class Solution {
public:TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) {if(t1 == NULL && t2==NULL) return NULL;else if(t1 == NULL && t2!=NULL) return t2;else if(t1 != NULL && t2==NULL) return t1;queue<TreeNode*> que;que.push(t1);      que.push(t2); while(!que.empty()) {TreeNode* T1Node = que.front();que.pop();TreeNode* T2Node = que.front();que.pop();//此时两个结点一定不为空T1Node->val += T2Node->val;//如果两棵树左结点都不为空,加入队列if(T1Node->left && T2Node->left){que.push(T1Node->left);que.push(T2Node->left);}//如果两棵树右结点都不为空,加入队列if(T1Node->right && T2Node->right){que.push(T1Node->right);que.push(T2Node->right);}//当t1的某个结点为空时且t2的结点不为空,不入队列//当t1左结点为空,t2左结点不为空if(!T1Node->left && T2Node->left){T1Node->left = T2Node->left;}if(!T1Node->right && T2Node->right){T1Node->right = T2Node->right;}}    return  t1;}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/377941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何关掉Microsoft Office Click-to-Run服务

很烦&#xff0c;一开电脑就出现 一、打开任务管理器(CtrlShiftEsc) 服务—>打开服务 二、找到Microsoft Office Click-to-Run Service 右击&#xff0c;选择属性 三、禁用即可

友盟—安卓巴士【Android开发原创教程大赛】

Android开发原创教程大赛正式拉开序幕了&#xff0c;由国内最专业的移动开发者服务及统计平台-友盟提供丰厚的话费奖品哦&#xff0c;为所有爱写教程的开发者提供的一份奖励。 活动时间&#xff1a;2011年11月29日——2011年12月21日 征集期&#xff1a;2011年…

leetcode 700. 二叉搜索树中的搜索 思考分析

目录题目1、不考虑BST性质&#xff0c;直接递归遍历2、回顾BST性质3、利用BST性质进行遍历4、简单的迭代方法题目 给定二叉搜索树&#xff08;BST&#xff09;的根节点和一个值。 你需要在BST中找到节点值等于给定值的节点。 返回以该节点为根的子树。 如果节点不存在&#xf…

一、环境准备

一、前提已安装好anaconda 二、打开cmd命令窗口 conda activate激活base环境 conda create -n pytorch python3.6创建一个名称为pytorch的环境空间&#xff0c;其中使用的python版本为3.6 conda env list查看当前都有哪些环境 conda activate pytorch 激活刚安装的环境 pip l…

LeetCode 98. 验证二叉搜索树 思考分析

题目 给定一个二叉树&#xff0c;判断其是否是一个有效的二叉搜索树。 假设一个二叉搜索树具有如下特征&#xff1a; 节点的左子树只包含小于当前节点的数。 节点的右子树只包含大于当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 1、利用BST性质&#xff1a;中序…

二、VC++环境的安装

一、打开PyCharm 在Terminal中激活pytorch环境&#xff0c;conda activate pytorch 安装pycocotools工具&#xff0c;pip install pycocotools 二、报错需安装VC 进入官网 安装完成之后重启电脑 三、再次安装pycocotools 打开Pycharm&#xff0c;安装pycocotools工具&am…

LeetCode 530. 二叉搜索树的最小绝对差 思考分析

目录题目思路1&#xff1a;递归遍历得到result数组(单调递增)&#xff0c;然后对数组进行前后差分&#xff0c;取最小值思路2&#xff1a;不用数组&#xff0c;进行优化思路3、回顾迭代法求解题目 给你一棵所有节点为非负值的二叉搜索树&#xff0c;请你计算树中任意两节点的差…

一、线性回归

一、在有监督学习中主要包括两大类问题 分类问题&#xff1a;你去银行贷款借钱&#xff0c;人家银行会不会借给你&#xff1f;当然只有两种答案&#xff1a;会、不会 回归问题&#xff1a;人家银行能借给你多少钱&#xff1f;是一个具体的值 举个例子&#xff1a;假如你去银行…

8-18-Exercise

8-18-小练 A.HDU 1172 猜数字 采用枚举~【赤果果的暴力~】 代码&#xff1a; 1 #include <iostream>2 #include <cstdio>3 #include <cstring>4 using namespace std;5 6 int x[111],y[111],s,ss,vis[4],dis[4];7 char a[111][5];8 9 void find(int b,int …

leetcode 501. 二叉搜索树中的众数 思考分析

目录题目1、不考虑BTS性质&#xff0c;直接寻找众数集合&#xff08;利用map&#xff09;2、考虑BTS的中序遍历结果性质题目 给定一个有相同值的二叉搜索树&#xff08;BST&#xff09;&#xff0c;找出 BST 中的所有众数&#xff08;出现频率最高的元素&#xff09;。 假定 BS…

二、模型评估方法

IDE为Jupyter Notebook scikit-learn官网 scikit-learn是一个专门用于机器学习的工具包 运用到啥函数不知道咋使用&#xff1f;戳它–>scikit-learn工具包的API文档 不知道用啥模板&#xff1f;戳它–>scikit-learn样例模型 功能翻译Classification分类Regression回归Cl…

三、线性回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

leetcode 236. 二叉树的最近公共祖先 思考分析

目录题目思考分析改进本文章代码思路来源于公众号【代码随想录】题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、…

leetcode 235. 二叉搜索树的最近公共祖先 思考分析

目录题目思考迭代法题目 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个结点 p、q&#xff0c;最近公共祖先表示为一个结点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&#xff0…

四、逻辑回归

逻辑回归logistic_regression(LR)其实是分类算法&#xff0c;而不是回归算法。 回归算法得到的是一个数&#xff0c;分类算法得到的是几个不同的类别。 逻辑回归就是通过函数将值转换为0-1之间&#xff0c;形成概率问题&#xff0c;从而实现了不同类别的分类。 Sigmoid 函数 …

运算符优先级

转载于:https://www.cnblogs.com/c-cloud/p/3280911.html

五、逻辑回归实验分析

所有代码块都是在Jupyter Notebook下进行调试运行&#xff0c;前后之间都相互关联。 文中所有代码块所涉及到的函数里面的详细参数均可通过scikit-learn官网API文档进行查阅&#xff0c;这里我只写下每行代码所实现的功能&#xff0c;参数的调整读者可以多进行试验调试。多动手…

二叉搜索树的插入、删除、修剪、构造操作(leetcode701、450、669、108)

目录1、leetcode 701. 二叉搜索树中的插入操作1、题目2、递归法3、迭代法2、leetcode 450. 二叉搜索树中的插入操作1、题目2、思路递归法3、迭代法4、删除结点的两个方法以及注意点3、leetcode 669. 修剪二叉搜索树1、题目2、思考与递归3、迭代法4、leetcode 108. 将有序数组转…

模拟退火算法解决np_P和NP问题与解决方案| 演算法

模拟退火算法解决npP问题 (P Problems) P is the set of all the decision problems solvable by deterministic algorithms in polynomial time. P是多项式时间内确定性算法可解决的所有决策问题的集合。 NP问题 (NP Problems) NP is the set of all the decision problems t…

POJ2251Dungeon Master

http://poj.org/problem?id2251 题意 &#xff1a; 就是迷宫升级版&#xff0c;从以前的一个矩阵也就是一层&#xff0c;变为现在的L层&#xff0c;" . "是可以走&#xff0c;但是“#”不可以走&#xff0c;从S走到E&#xff0c;求最短的路径&#xff0c;若是找不到…