合并二叉树

news/2024/7/20 22:53:13 标签: leetcode, b树, 深度优先

将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为NULL的节点将直接作为新二叉树的节点。

方法1:使用递归

递归三部曲:

(1)参数和返回值:参数为两个二叉树的根结点,返回值为合并后二叉树的根结点。

(2)确定终止条件:两个节点其中一个为零,直接返回不为零的结点。

(3)单层递归的逻辑。

具体实现代码如下:

//递归法
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
    //确定终止条件 
    if (root1 == NULL) return root2;
    if (root2 == NULL) return root1;
    //单层递归的逻辑
    root1->val += root2->val;
    root1->left = mergeTrees(root1->left, root2->left);
    root1->right = mergeTrees(root1->right, root2->right);
    
    return root1;
}

方法2:迭代法

将两棵树的结点同时放入队列中进行比较。

//迭代法
TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
	if(root1 == NULL) return root2;
	if(root2 == NULL) return root1;
	queue<TreeNode*> que;
	que.push(root1);
	que.push(root2);
	while(!que.empty()) {
		TreeNode* node1 = que.front(); que.pop();
		TreeNode* node2 = que.front(); que.pop();
		node1->val += node2->val;
		if(node1->left && node2->left) {
			que.push(node1->left);
			que.push(node2->left);
		}
		
		if(node1->right && node2->right) {
			que.push(node1->right);
			que.push(node2->right);
		}
		
		if(!node1->left && node->left) {
			node1->left = node2->left;
		}
		
		if(!node1->right && node->right) {
			node1->right = node2->right;
		}
	}
	return t1;
}

http://www.niftyadmin.cn/n/1445884.html

相关文章

Jenkins+svn+maven

首先我们在我们的服务器上安装好svn和maven 这里在前两步骤基本上没有啥问题&#xff0c;主要就是在Jenkins的步骤我弄了好长时间&#xff0c;这里记录一下 Jenkins的问题我是在这个网址解决的&#xff1a;http://blog.csdn.net/pein_zero/article/details/52597615 还有一些其…

用VC++自制王码五笔输入法安装包(转)

用VC自制王码五笔输入法安装包 &#xff1a; Windows XP没有自带五笔字型输入法&#xff0c;虽然网上相关输入法很多&#xff0c;但一方面有些版本是共享软件&#xff0c;另一方面也许很多五笔字型输入法的老用户最习惯用的还是老牌的“王码五笔字型输入法86/98版”。微软Offi…

又一次发现Oracle太美之glogin.sql

又一次发现Oracle太美之glogin.sql刚開始接触Oracle的时候&#xff0c;有时候一登陆一个生产环境。常常会出现以下的情况&#xff1a;[oraclerh64 app]$ sqlplus / as sysdbaSQL*Plus: Release 11.2.0.4.0 Production on Thu May 15 03:17:34 2014Copyright (c) 1982, 2013, Or…

图文解析windowsvista系统完整备份功能(转)

此前我们曾经为您介绍过windows vista的系统备份功能&#xff0c;今天&#xff0c;国外媒体带来更多图文并茂讲解。备份数据对于任何pc用户来说都是不容小觑的问题&#xff0c;不过&#xff0c;微软现有的nt backup组件功能并不完善&#xff0c;用户界面亦不够友善&#xff0c;…

hdu 5151 Sit sit sit(DP)

题目链接&#xff1a;hdu 5151 Sit sit sit 区间dp&#xff0c;dp[i][j]表示从i到j的方案数&#xff0c;每次枚举i~j之间放最大值的位置&#xff0c;左右颜色不同的位置不能放最大值。 #include <cstdio> #include <cstring> #include <algorithm>using nam…

hdu 5146 Sequence

题目链接&#xff1a;hdu 5146 Sequence #include <cstdio> #include <cstring> #include <algorithm>using namespace std;const int maxn 1005; typedef long long ll; int n, arr[maxn];bool judge () {int k n / 2;for (int i 0; i < k; i)if (arr…

hdu 5147 Sequence II(树状数组)

题目链接&#xff1a;hdu 5147 Sequence II 预处理每个位置作为b和c可以组成的对数&#xff0c;然后枚举b的位置计算。 #include <cstdio> #include <cstring> #include <algorithm>using namespace std; typedef long long ll; const int maxn 50005;int …

网吧管理员贴身装备之《网吧管理专家》(转)

专家系列网管软件之《网吧管理专家》是通过替换开始菜单和桌面以及更改各种Windows内部系统调用&#xff0c;保护计算机安全&#xff0c;而又不会因为替换了任务栏而使QQ、ICQ、Netant和Foxmail这类需要驻留系统托盘的程序无法运行。《网吧管理专家》提供各种计费方式以及对上机…