廣州做網(wǎng)站西安seo陽(yáng)建
?目錄鏈接:
力扣編程題-解法匯總_分享+記錄-CSDN博客
GitHub同步刷題項(xiàng)目:
https://github.com/September26/java-algorithms
原題鏈接:力扣(LeetCode)官網(wǎng) - 全球極客摯愛(ài)的技術(shù)成長(zhǎng)平臺(tái)
描述:
給你兩棵二叉樹(shù):?root1
?和?root2
?。
想象一下,當(dāng)你將其中一棵覆蓋到另一棵之上時(shí),兩棵樹(shù)上的一些節(jié)點(diǎn)將會(huì)重疊(而另一些不會(huì))。你需要將這兩棵樹(shù)合并成一棵新二叉樹(shù)。合并的規(guī)則是:如果兩個(gè)節(jié)點(diǎn)重疊,那么將這兩個(gè)節(jié)點(diǎn)的值相加作為合并后節(jié)點(diǎn)的新值;否則,不為?null 的節(jié)點(diǎn)將直接作為新二叉樹(shù)的節(jié)點(diǎn)。
返回合并后的二叉樹(shù)。
注意:?合并過(guò)程必須從兩個(gè)樹(shù)的根節(jié)點(diǎn)開(kāi)始。
示例 1:
輸入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7] 輸出:[3,4,5,5,4,null,7]
示例 2:
輸入:root1 = [1], root2 = [1,2] 輸出:[2,2]
提示:
- 兩棵樹(shù)中的節(jié)點(diǎn)數(shù)目在范圍?
[0, 2000]
?內(nèi) -104 <= Node.val <= 104
?
解題思路:
* 解題思路:
* root1和root2合并,我們分為三種情況:
* root1為空時(shí),則直接使用root2及其子節(jié)點(diǎn)即可。
* root2為空時(shí),則直接使用root1即可。
* 都不為空時(shí),則使用root1和root2的和,并且遞歸計(jì)算其子節(jié)點(diǎn)。
代碼:
class Solution617
{
public:TreeNode *mergeTrees(TreeNode *root1, TreeNode *root2){if (root1 == nullptr){// root1為空,直接用root2的root1 = root2;}else if (root2 == nullptr){// root2為空,直接用root1的}else{// 都不為空,則合并root1->val += root2->val;if (root1->left != nullptr || root2->left != nullptr){root1->left = mergeTrees(root1->left, root2->left);}if (root1->right != nullptr || root2->right != nullptr){root1->right = mergeTrees(root1->right, root2->right);}}return root1;}
};