欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++合并二叉樹(shù)的思路與示例代碼

 更新時(shí)間:2021年08月06日 10:14:08   作者:久病成良醫(yī)  
二叉樹(shù)大家應(yīng)該都不陌生,但是合并二叉樹(shù)呢?這篇文章主要給大家介紹了關(guān)于C++合并二叉樹(shù)的相關(guān)資料,文中給出了兩種解決的方法,大家可以根據(jù)需要選擇對(duì)應(yīng)的方法,需要的朋友可以參考下

前言

給定兩個(gè)二叉樹(shù),想象當(dāng)你將它們中的一個(gè)覆蓋到另一個(gè)上時(shí),兩個(gè)二叉樹(shù)的一些節(jié)點(diǎn)便會(huì)重疊。你需要將他們合并為一個(gè)新的二叉樹(shù)。合并的規(guī)則是如果兩個(gè)節(jié)點(diǎn)重疊,那么將他們的值相加作為節(jié)點(diǎn)合并后的新值,否則不為 NULL 的節(jié)點(diǎn)將直接作為新二叉樹(shù)的節(jié)點(diǎn)。

示例 1:

思路

1.確定遞歸函數(shù)的參數(shù)和返回值:

首先那么要合入兩個(gè)二叉樹(shù),那么參數(shù)至少是要傳入兩個(gè)二叉樹(shù)的根節(jié)點(diǎn),返回值就是合并之后二叉樹(shù)的根節(jié)點(diǎn)。

代碼如下:

TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2)

2.確定終止條件:

因?yàn)槭莻魅肓藘蓚€(gè)樹(shù),那么就有兩個(gè)樹(shù)遍歷的節(jié)點(diǎn)t1 和 t2,如果t1 == NULL 了,兩個(gè)樹(shù)合并就應(yīng)該是 t2 了啊(如果t2也為NULL也無(wú)所謂,合并之后就是NULL)。

反過(guò)來(lái)如果t2 == NULL,那么兩個(gè)數(shù)合并就是t1(如果t1也為NULL也無(wú)所謂,合并之后就是NULL)。

代碼如下:

if (t1 == NULL) return t2; // 如果t1為空,合并之后就應(yīng)該是t2
if (t2 == NULL) return t1; // 如果t2為空,合并之后就應(yīng)該是t1

3.確定單層遞歸的邏輯:

單層遞歸的邏輯就比較好些了,這里我們用重復(fù)利用一下t1這個(gè)樹(shù),t1就是合并之后樹(shù)的根節(jié)點(diǎn)(就是修改了原來(lái)樹(shù)的結(jié)構(gòu))。
那么單層遞歸中,就要把兩棵樹(shù)的元素加到一起。

t1->val += t2->val;

接下來(lái)t1 的左子樹(shù)是:合并 t1左子樹(shù) t2左子樹(shù)之后的左子樹(shù)。

t1 的右子樹(shù):是 合并 t1右子樹(shù) t2右子樹(shù)之后的右子樹(shù)。

最終t1就是合并之后的根節(jié)點(diǎn)。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode() : val(0), left(nullptr), right(nullptr) {}
 *     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
 *     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
 * };
 */
class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        // 判空
        if(root1==nullptr) return root2;
        if(root2==nullptr) return root1;

        // 修改了t1的數(shù)值和結(jié)構(gòu)
        root1->val+=root2->val;
        root1->left=mergeTrees(root1->left,root2->left);
        root1->right=mergeTrees(root1->right,root2->right);
        
        return root1;
    }
};

附:新建一顆樹(shù)

不破壞原有兩顆樹(shù)結(jié)構(gòu)

/**
 * 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* mergeTrees(TreeNode* t1, TreeNode* t2) {
        if(!t1&&!t2)
            return NULL;
        TreeNode* node=new TreeNode(0);
        node->val=(t1? t1->val:0)+(t2? t2->val:0);
        node->left=mergeTrees((t1? t1->left: NULL),(t2? t2->left:NULL));
        node->right=mergeTrees((t1? t1->right: NULL),(t2? t2->right : NULL));
        return node;
    }
};

總結(jié)

到此這篇關(guān)于C++合并二叉樹(shù)的文章就介紹到這了,更多相關(guān)C++合并二叉樹(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言中判斷int,long型等變量是否賦值的方法詳解

    C語(yǔ)言中判斷int,long型等變量是否賦值的方法詳解

    聲明了int ,long型等局部變量,在利用一些方法給這些變量賦值之后,想判斷這些變量是不是真的被賦初值了,怎么辦
    2013-07-07
  • C++繼承模式詳解

    C++繼承模式詳解

    繼承機(jī)制是面向?qū)ο蟪绦蛟O(shè)計(jì)使代碼可以復(fù)用的最重要的手段,它允許程序員在保持原有的特性基礎(chǔ)上進(jìn)行擴(kuò)展,增加功能,這樣產(chǎn)生新的類,稱作是派生類。繼承呈現(xiàn)了面向?qū)ο蟪绦蛟O(shè)計(jì)的層析結(jié)構(gòu),體現(xiàn)了由簡(jiǎn)單到復(fù)雜的認(rèn)知過(guò)程。繼承是類設(shè)計(jì)層次的復(fù)用。
    2021-12-12
  • vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐

    本文主要介紹了vs2022啟動(dòng)一個(gè)CmakeLists.txt項(xiàng)目的實(shí)踐,文中通過(guò)圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-06-06
  • C語(yǔ)言中的字符型數(shù)據(jù)與ASCII碼表

    C語(yǔ)言中的字符型數(shù)據(jù)與ASCII碼表

    這篇文章主要介紹了C語(yǔ)言中的字符型數(shù)據(jù)與ASCII碼表,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)

    C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)

    C語(yǔ)言中怎么在main函數(shù)開(kāi)始前執(zhí)行函數(shù)呢?下面小編就大家詳細(xì)的介紹一下。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • C語(yǔ)言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程

    C語(yǔ)言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程

    本文主要介紹了C語(yǔ)言中pthread_exit()函數(shù)實(shí)現(xiàn)終止線程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-05-05
  • C++利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載

    C++利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載

    這篇文章主要為大家詳細(xì)介紹了C++如何利用libcurl庫(kù)實(shí)現(xiàn)多線程文件下載,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-01-01
  • 詳解C++編程中對(duì)于函數(shù)的基本使用

    詳解C++編程中對(duì)于函數(shù)的基本使用

    這篇文章主要介紹了詳解C++編程中對(duì)于函數(shù)的使用,包括函數(shù)的參數(shù)和返回值以及調(diào)用等基本的知識(shí)點(diǎn),需要的朋友可以參考下
    2015-09-09
  • 基于樹(shù)莓派的語(yǔ)音機(jī)器人

    基于樹(shù)莓派的語(yǔ)音機(jī)器人

    這篇文章主要為大家詳細(xì)介紹了基于樹(shù)莓派的語(yǔ)音機(jī)器人,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • C語(yǔ)言鏈表實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng)

    C語(yǔ)言鏈表實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言鏈表實(shí)現(xiàn)簡(jiǎn)單圖書(shū)管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03

最新評(píng)論