国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

??目錄

一,單值二叉樹

題目詳情:

解法:父子比較法

解題思路:

思路實現(xiàn):

源代碼:

二,相同的樹

題目詳情:

解法:比較法

解題思路:

思路實現(xiàn):

源代碼:

三,翻轉(zhuǎn)二叉樹

解法:替換法

解題思路:

思路實現(xiàn):

源代碼:


一,單值二叉樹

題目詳情:

如果二叉樹每個節(jié)點都具有相同的值,那么該二叉樹就是單值二叉樹;

只有給定的樹是單值二叉樹時返回?true;否則返回?false;

提示:

1,給定樹的結(jié)點樹范圍是【1,100】

2,每個結(jié)點的值都是整數(shù),范圍為【0,99】

示例1:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:nums = [1,1,1,1,1,NULL,1?]

輸出:true

示例2:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:nums = [2,2,2,5,2]

輸出:false

解法:父子比較法

解題思路:

以上圖為例:要判斷根結(jié)點為(2)的二叉樹是否為單值二叉樹可以分解為(2)的左右子樹是否為單值二叉樹,這就很符合遞歸思路可以用遞歸解決;【(2)= 左子樹 && 右子樹】

判斷條件:

當(dāng)結(jié)點為NULL時返回 true ;

當(dāng)子結(jié)點存在時,并且與父親結(jié)點的值不相同時返回 false;

思路實現(xiàn):

首先要判空:

//判斷空
if(root==NULL)
{
    return true;
}

?當(dāng)結(jié)點為空時不影響父親孩子之間的關(guān)系;

然后判斷孩子,父親之間的值的關(guān)系:

//判斷孩子與父親的值
if(root->left && root->val!=root->left->val)
{
    return false;
}
if(root->right && root->val!=root->right->val)
{
    return false;
}

?判斷孩子,父親所對應(yīng)的值是否相同;

大事化小:以上條件都滿足時,還需左右子樹是否為單值二叉樹,只有當(dāng)左右子樹都為單值二叉樹時才為 true;

//化為兩顆子樹是否為單值樹
return isUnivalTree(root->left) && isUnivalTree(root->right);

?要用邏輯與,需要雙方為真時才返回 true;

源代碼:

bool isUnivalTree(struct TreeNode* root){
    //判斷空
    if(root==NULL)
    {
        return true;
    }
    //判斷孩子與父親的值
    if(root->left && root->val!=root->left->val)
    {
        return false;
    }
    if(root->right && root->val!=root->right->val)
    {
        return false;
    }
    //化為兩顆子樹是否為單值樹
    return isUnivalTree(root->left) && isUnivalTree(root->right);
}

我們可以用示例來演算一遍,流程也是這樣的;

像這種遞歸題目要演算其過程需要畫圖,這樣才是最直觀的;

二,相同的樹

題目詳情:

給你兩棵二叉樹的根結(jié)點?p 和 q?,編寫一個函數(shù)來檢驗這兩棵樹是否相同;

如果兩個樹在結(jié)構(gòu)上相同,并且結(jié)點具有相同的值,則認(rèn)為它們是相同的;

提示:

兩棵樹上的結(jié)點數(shù)目都在范圍【0,100】內(nèi)

-104<=Node.val<=10?

示例1:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:p = [ 1,2,3 ],q = [ 1,2,3 ]

輸出:true

示例2:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:p = [ 1,2 ],q = [ 1,2?]

輸出:false

示例3:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:p = [ 1,2,1?],q = [ 1,2,2 ]

輸出:false

解法:比較法

解題思路:

要判斷兩棵樹是否一致,要考慮的是他們的結(jié)點是否都存在,結(jié)點對應(yīng)的值是否相同;

以上圖為例:根結(jié)點相同了,還要判斷其左右子樹是否也相同,然后層層往下,這道題也是用遞歸思想;

思路實現(xiàn):

首先要判斷他們的結(jié)點是否對應(yīng)存在:

    //雙方都為空
    if(p==NULL && q==NULL)
    {
      return true;
    }
    //一方為空另一方不為空
    if((p==NULL || q==NULL) 
    {
      return false;
    }

當(dāng)雙方對應(yīng)的結(jié)點都為空時返回 true;

當(dāng)雙方對應(yīng)的結(jié)點只有一方為空,另一方不為空時,返回 false;

然后判斷它們對應(yīng)的結(jié)點的值的情況:

    //判斷所對應(yīng)的值是否相同
    if(p->val != q->val)
    {
      return false;
    }

當(dāng)所對應(yīng)的值不相等則返回 false;

大事化?。?/strong>當(dāng)以上條件都滿足時,還需要判斷這兩棵樹所對應(yīng)的左右子樹是否相同;

    //判斷其對應(yīng)的左右子樹是否也相同
    return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);

源代碼:

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    //雙方都為空
    if(p==NULL && q==NULL)
    {
      return true;
    }
    //一方為空另一方不為空
    if((p==NULL || q==NULL) 
    {
      return false;
    }
    //判斷所對應(yīng)的值是否相同
    if(p->val != q->val)
    {
      return false;
    }
    //判斷其對應(yīng)的左右子樹是否也相同
    return isSameTree(p->left,q->left) && isSameTree(p->right,q->right);
}

這就是判斷兩顆二叉樹是否相同問題的解題思路了,還是利用遞歸;

三,翻轉(zhuǎn)二叉樹

題目詳情:

給你一棵二叉樹的根節(jié)點 root ,翻轉(zhuǎn)這棵二叉樹,并返回其根節(jié)點

示例1:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:root = [ 4,2,7,1,3,6,9 ]

輸出:[ 4 7 2 9 6 3 1 ]

示例2:

【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五),數(shù)據(jù)結(jié)構(gòu),算法,c語言,開發(fā)語言,排序算法

輸入:root = [ 2,1,3 ]

輸出:[ 2,3,1]

示例3:

輸入:root = [ ]

輸出:[ ]

解法:替換法

解題思路:

翻轉(zhuǎn)翻轉(zhuǎn)所謂翻轉(zhuǎn)其實就是將左右子樹換個位置而已,直接將其交換,層層交換下去直至NULL,用遞歸來實現(xiàn);

思路實現(xiàn):

首先還是判空,如果為空直接返回NULL即可;

然后直接交換左,右子樹,再讓其左,右子樹也如此下去,就完成了對整顆樹的翻轉(zhuǎn)了,在返回根結(jié)點即可;

源代碼:

void swap(struct TreeNode** left,struct TreeNode** right)
{
    struct TreeNode* tmp=*left;
    *left=*right;
    *right=tmp;
}

struct TreeNode* invertTree(struct TreeNode* root){
    //判空
    if(root==NULL)
    {
        return NULL;
    }
    //交換
    swap(&root->left,&root->right);
    //左子樹翻轉(zhuǎn)
    invertTree(root->left);
    //右子樹翻轉(zhuǎn)
    invertTree(root->right);
    return root;
}

基本上與二叉樹相關(guān)的練習(xí)都要使用遞歸思想,前期培養(yǎng)遞歸思路最好就是畫圖解析,這個很重要,畫圖能讓我們更直觀的感受結(jié)點之間的關(guān)系,特別是感受那個返回的過程領(lǐng)悟其中的奧妙,久而久之我們對于遞歸的思路就更加清晰了,不至于摸不著北;

第五階段就到這里了,這階段帶大家刷道些題目來感受一下二叉樹的魅力!

后面博主會陸續(xù)更新;

如有不足之處歡迎來補充交流!

完結(jié)。。文章來源地址http://www.zghlxwxcb.cn/news/detail-725687.html


到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】單值二叉樹 & 相同的樹 & 翻轉(zhuǎn)二叉樹(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【C語言題解】 | 965. 單值二叉樹

    【C語言題解】 | 965. 單值二叉樹

    提示: 給定樹的節(jié)點數(shù)范圍是 [1, 100]。 每個節(jié)點的值都是整數(shù),范圍為 [0, 99] 。 這個題目我們通過分治思想來解題: 首先傳入的是根節(jié)點 其次判斷根節(jié)點是否有左子樹和右子樹,若存在則判斷左右子樹的值是否于根節(jié)點的值相同(不同則返回false,相同則繼續(xù)) 若正確,

    2024年01月21日
    瀏覽(14)
  • 【數(shù)據(jù)結(jié)構(gòu)-二叉樹】二叉樹

    【數(shù)據(jù)結(jié)構(gòu)-二叉樹】二叉樹

    ??????歡迎來到我的博客,很高興能夠在這里和您見面!希望您在這里可以感受到一份輕松愉快的氛圍,不僅可以獲得有趣的內(nèi)容和知識,也可以暢所欲言、分享您的想法和見解。 推薦:kuan 的首頁,持續(xù)學(xué)習(xí),不斷總結(jié),共同進(jìn)步,活到老學(xué)到老 導(dǎo)航 檀越劍指大廠系列:全面總

    2024年02月07日
    瀏覽(34)
  • 數(shù)據(jù)結(jié)構(gòu):搜索二叉樹 | 平衡二叉樹

    數(shù)據(jù)結(jié)構(gòu):搜索二叉樹 | 平衡二叉樹

    博客寫的代碼都放在這里:gitee倉庫鏈接 1.二叉搜索樹 1.1.基本概念 二叉搜索樹又稱二叉排序樹, 可以為空,如果不為空具有以下性質(zhì)的二叉樹 : 若它的左子樹不為空,則左子樹上所有節(jié)點的值都小于根節(jié)點的值 若它的右子樹不為空,則右子樹上所有節(jié)點的值都大于根節(jié)點的

    2024年01月23日
    瀏覽(36)
  • 【數(shù)據(jù)結(jié)構(gòu)和算法】--- 二叉樹(3)--二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn)(1)

    【數(shù)據(jù)結(jié)構(gòu)和算法】--- 二叉樹(3)--二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的實現(xiàn)(1)

    在學(xué)習(xí)二叉樹的基本操作前,需先要創(chuàng)建一棵二叉樹,然后才能學(xué)習(xí)其相關(guān)的基本操作。由于現(xiàn)在大家對二叉樹結(jié)構(gòu)掌握還不夠深入,且為了方便后面的介紹,此處手動快速創(chuàng)建一棵簡單的二叉樹,快速進(jìn)入二叉樹操作學(xué)習(xí),等二叉樹結(jié)構(gòu)了解的差不多時,我們反過頭再來研

    2024年01月25日
    瀏覽(28)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹——順序結(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹——順序結(jié)構(gòu)

    由于每個節(jié)點都 只有一個父節(jié)點 ,所以我們可通過雙親來表示一棵樹。具體方式通過 數(shù)組的形式 實現(xiàn)。 根節(jié)點的下標(biāo)為0 按照層序從上到下排序 每層從左向右遞增 表示形式: 二維數(shù)組 數(shù)據(jù)的列標(biāo)為0 ,只需確定行標(biāo),即可鎖定位置 根節(jié)點的父節(jié)點下標(biāo)為 -1 列標(biāo)為1存父節(jié)

    2024年02月02日
    瀏覽(20)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹——鏈?zhǔn)浇Y(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹——鏈?zhǔn)浇Y(jié)構(gòu)

    目錄 ?一、前置聲明 二、二叉樹的遍歷 2.1?前序、中序以及后序遍歷 2.2?層序遍歷 三、節(jié)點個數(shù)以及高度 3.1?節(jié)點個數(shù) 3.2?葉子節(jié)點個數(shù) 3.3?第k層節(jié)點個數(shù) 3.4?二叉樹的高度/深度 3.5?查找值為x的節(jié)點 四、二叉樹的創(chuàng)建和銷毀 4.1?構(gòu)建二叉樹 4.2?二叉樹銷毀 4.3?判斷二叉樹

    2024年02月16日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu)-二叉樹-二叉樹左右孩子交換(遞歸)

    ?注:本文采用隊列和遞歸的算法進(jìn)行創(chuàng)建和層次遍歷。同時不能采用BFS和DFS,因為需要把當(dāng)前根節(jié)點的左孩、右孩勾鏈并輸入才能遞歸下一個根節(jié)點; 隊列用于存儲此時應(yīng)該遞歸的根節(jié)點; 格式:每一行尾不能有空格; Description 根據(jù)輸入利用二叉鏈表創(chuàng)建二叉樹,并將所

    2024年02月04日
    瀏覽(37)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹鏈?zhǔn)浇Y(jié)構(gòu)

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹鏈?zhǔn)浇Y(jié)構(gòu)

    ??write in front?? ??所屬專欄:初階數(shù)據(jù)結(jié)構(gòu) ???博客主頁:睿睿的博客主頁 ???代碼倉庫:??VS2022_C語言倉庫 ??您的點贊、關(guān)注、收藏、評論,是對我最大的激勵和支持?。?! 關(guān)注我,關(guān)注我,關(guān)注我 , 你們將會看到更多的優(yōu)質(zhì)內(nèi)容??! ??在之前的二叉樹的順序結(jié)

    2024年02月03日
    瀏覽(25)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹的介紹和二叉樹堆

    ??作者簡介: 加油,旭杏,目前大二,正在學(xué)習(xí) C++ , 數(shù)據(jù)結(jié)構(gòu) 等?? ??作者主頁:加油,旭杏的主頁?? ?本文收錄在:再識C進(jìn)階的專欄?? ??代碼倉庫:旭日東升 1?? ??歡迎大家點贊 ?? 收藏 ? 加關(guān)注哦!?? ???????樹這一概念,在我們剛開始聽說的時候會覺得

    2024年01月20日
    瀏覽(34)
  • 【數(shù)據(jù)結(jié)構(gòu)】 二叉樹理論概念!一文了解二叉樹!

    【數(shù)據(jù)結(jié)構(gòu)】 二叉樹理論概念!一文了解二叉樹!

    ?? 嶼小夏 : 個人主頁 ??個人專欄 : 數(shù)據(jù)結(jié)構(gòu)解析 ?? 莫道桑榆晚,為霞尚滿天! 什么是二叉樹?二叉樹的組成構(gòu)造是什么樣的?我們將由淺入深,循序漸進(jìn)的方式把二叉樹給搞明白,讓你徹底了解二叉樹! 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一

    2024年02月05日
    瀏覽(52)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包