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

【LeetCode】——鏈式二叉樹經典OJ題詳解

這篇具有很好參考價值的文章主要介紹了【LeetCode】——鏈式二叉樹經典OJ題詳解。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?=========================================================================

主頁點擊直達:個人主頁

我的小倉庫:代碼倉庫

C語言偷著笑:C語言專欄

數據結構挨打小記:初階數據結構專欄

Linux被操作記:Linux專欄

LeetCode刷題掉發(fā)記:LeetCode刷題

算法頭疼記:算法專欄?

=========================================================================

目錄

前言:

LeetCode 965.單值二叉樹

LeetCode 100.相同的樹

LeetCode 101.對稱二叉樹

LeetCode 144 145 94 .二叉樹的前、中、后序遍歷

LeetCode 572.另一棵樹的子樹


前言:

在之前的文章講解了二叉樹的鏈式結構的實現以及前、中、后序的遍歷。不知道大家看完后有沒有理解和有所收獲,今天基于那篇文章給大家分享講解幾道經典的題目,更便于大家的理解和深入。

二叉樹的題目一定要會兩個思想

第一個思想:拆分 一定要將二叉樹拆分為根、左子樹、右子樹首先就是要判斷根結點是否為空。第二個思想:遞歸,善于使用遞歸。


LeetCode 965.單值二叉樹

OJ鏈接

題目描述:?

如果二叉樹每個節(jié)點都具有相同的值,那么該二叉樹就是單值二叉樹。只有給定的樹是單值二叉樹時,才返回?true;否則返回?false。

示例 1:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:[1,1,1,1,1,null,1]
輸出:true

示例 2:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:[2,2,2,5,2]
輸出:false

審題總結:

判斷一個二叉樹這所有節(jié)點的值是否相等,相等返回true,否則返回false;

思路講解:首先判斷根是否為空,如果為空直接返回true。不為空判斷左子樹是否存在,存在的話判斷和根節(jié)點的值是否相等,如果相等返回true,否則返回false;繼續(xù)判斷右子樹是否存在,存在的話判斷和根節(jié)點的值是否相等,如果相等返回true,否則返回法false。左右子樹都存在的話使用遞歸遍歷。

接口代碼

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);
}

LeetCode 100.相同的樹


OJ鏈接

題目描述:給你兩棵二叉樹的根節(jié)點?p?和?q?,編寫一個函數來檢驗這兩棵樹是否相同

如果兩個樹在結構上相同,并且節(jié)點具有相同的值,則認為它們是相同的。

示例 1:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

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

示例 2:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:p = [1,2], q = [1,null,2]
輸出:false

示例 3:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:p = [1,2,1], q = [1,1,2]
輸出:false

思路講解:

先將根拆結點拆分出來,兩個根節(jié)點有三種情況,都為空、兩個根節(jié)點中有一個為空。如果都為空,則返回true;如果有一個為空則返回false。根節(jié)點判斷完成后判斷根節(jié)點的值是否相等;使用遞歸遍歷左子樹和右子樹。

接口代碼

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    if(p==NULL&&q==NULL)
    return true;
    if(p==NULL||q==NULL)
    return false;
    if(p->val!=q->val)
    return false;
    return isSameTree(p->left,q->left)
    &&isSameTree(p->right,q->right);
}

LeetCode 101.對稱二叉樹


OJ鏈接

題目描述:

給你一個二叉樹的根節(jié)點?root?, 檢查它是否軸對稱。

示例 1:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:root = [1,2,2,3,4,4,3]
輸出:true

示例 2:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:root = [1,2,2,null,3,null,3]
輸出:falses

思路講解:

這個題目和上個題目非常的相似,還是拆分為根、左子樹、右子樹。這里將兩個子樹看成單獨的樹,就和上面題的思路大差不差了。不同的是要判斷左邊的值和右邊的值是否相等,這樣才算對稱。

實現代碼

 bool isSameTree(struct TreeNode*p,struct TreeNode*q)
 {
    if(p==NULL&&q==NULL)
    {
        return true;
    }
     if(p==NULL||q==NULL)
    {
        return false;
    }
    if(p->val!=q->val)
    {
        return false;
    }
  
    
        return isSameTree(p->left,q->right)
    &&isSameTree(p->right,q->left);
    
 }
bool isSymmetric(struct TreeNode* root){
 if(root!=NULL)
 {
     return isSameTree(root->left,root->right);
 }
 else
 return true;
}

LeetCode 144 145 94 .二叉樹的前、中、后序遍歷

前序遍歷OJ鏈接

中序遍歷OJ鏈接

后序遍歷OJ鏈接

關于二叉樹的前、中、后序遍歷的文章點擊直達,這里我不做介紹。由于這三個題目是差不多只是將遍歷的值用數組的形式便是出來,所以我就只講解前序遍歷、中、后序遍歷交給大家練習。

題目描述:給你一棵二叉樹的根節(jié)點?root?,返回其節(jié)點值的?后序遍歷?。

示例 1:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

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

示例 2:

輸入:root = []
輸出:[]

示例 3:

輸入:root = [1]
輸出:[1]

思路講解:

首先求出這棵二叉樹有幾個結點,根據結點動態(tài)開辟相應大小的空間。將根節(jié)點、動態(tài)開辟的數組,變量的地址,交給一個前序遍歷的函數,根據前序遍歷的規(guī)則,進行遞歸給數組賦值。

實現代碼

 int treesize(struct TreeNode*root)
 {
     return root==NULL? 0:treesize(root->left)+treesize(root->right)+1;
 }
 void preoder(struct TreeNode *root,int *a,int *pi)
 {
     if(root==NULL)
     return;
     a[(*pi)++]=root->val;
     preoder(root->left,a,pi);
     preoder(root->right,a,pi);
 }
int* preorderTraversal(struct TreeNode* root, int* returnSize){
     int n=treesize(root);
     int *a=(int *)malloc(sizeof(int )*n);
     int j=0;
    preoder(root,a,&j);
    *returnSize=n;
     return a;
}

LeetCode 572.另一棵樹的子樹

OJ鏈接

題目描述:

給你兩棵二叉樹?root?和?subRoot?。檢驗?root?中是否包含和?subRoot?具有相同結構和節(jié)點值的子樹。如果存在,返回?true?;否則,返回?false?。二叉樹?tree?的一棵子樹包括?tree?的某個節(jié)點和這個節(jié)點的所有后代節(jié)點。tree?也可以看做它自身的一棵子樹。

示例 1:

【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:root = [3,4,5,1,2], subRoot = [4,1,2]
輸出:true

示例 2:【LeetCode】——鏈式二叉樹經典OJ題詳解,算法,數據結構挨打小記,leetcode,算法?

輸入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
輸出:falses

思路講解:

這個題和上面的LeetCode 100.相同的樹基本上也大差不差。首先判斷根節(jié)點是否為空,如果根節(jié)點為空,則直接返回false;不為空則直接使用是否為相同的樹判斷函數,判斷所給樹是否為子樹,如果為真則直接返回true,使用遞歸遍歷根節(jié)點的左右子樹和所給所給子樹相比較。

實現代碼

bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    if(p==NULL&&q==NULL)
    return true;
    if(p==NULL||q==NULL)
    return false;
    if(p->val!=q->val)
    return false;
    return isSameTree(p->left,q->left)
    &&isSameTree(p->right,q->right);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
if(root==NULL)
{
    return false;
}
if(root->val==subRoot->val)
{
    if(isSameTree(root,subRoot))
    return true;
}
return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);

}

?今天的分享就到此結束了,希望大家閱讀完可以有所收獲,同時也感謝各位看官的三連支持。文章有問題可以直接留言,我一定及時認真的修改。文章來源地址http://www.zghlxwxcb.cn/news/detail-714693.html

到了這里,關于【LeetCode】——鏈式二叉樹經典OJ題詳解的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 【LeetCode】【數據結構】二叉樹必刷OJ題

    【LeetCode】【數據結構】二叉樹必刷OJ題

    ?? 樊梓慕: 個人主頁 ? ?? 個人專欄: 《C語言》《數據結構》《藍橋杯試題》《LeetCode刷題筆記》《實訓項目》 ?? 每一個不曾起舞的日子,都是對生命的辜負 目錄 前言 【LeetCode】226.翻轉二叉樹 【LeetCode】100.相同的樹 【LeetCode】5.對稱二叉樹 【LeetCode】9.另一顆樹的子樹

    2024年02月08日
    瀏覽(22)
  • 【數據結構】二叉樹的鏈式結構的實現 -- 詳解

    【數據結構】二叉樹的鏈式結構的實現 -- 詳解

    在學習二叉樹的基本操作前,需先要創(chuàng)建一棵二叉樹,然后才能學習其相關的基本操作。為了降低大家學習成本,此處手動快速創(chuàng)建一棵簡單的二叉樹,快速進入二叉樹操作學習。 注意 :上述代碼并不是創(chuàng)建二叉樹的方式。 學習二叉樹結構,最簡單的方式就是遍歷。所謂

    2024年02月12日
    瀏覽(29)
  • 數據結構與算法—二叉樹數組表示(ArrayBinTree)、二叉樹的鏈式表示(LinkedBinTree)的基于C++模板代碼實現

    1、二叉樹的順序表示:ArrayBinTree.h 二叉樹的順序表示法操作方便,但缺點是容易造成存儲空間浪費。 這是一個用數組實現的二叉樹類模板。它可以創(chuàng)建一個空樹,也可以在指定的位置插入結點并設置結點的值,可以刪除子樹,并支持逐層遍歷。使用該類時,需要提供一個元

    2024年02月06日
    瀏覽(19)
  • 鏈式二叉樹OJ題思路分享

    鏈式二叉樹OJ題思路分享

    ?博主CSDN主頁:杭電碼農-NEO? ? ?專欄分類:刷題分享? ? ?代碼倉庫:NEO的學習日記? ? ??關注我??帶你刷更多C語言和數據結構的題! ? ???? 鏈式二叉樹這一個板塊的考題還是比較多的,這里我給大家分享幾道很經典的OJ題,僅供參考! 分別是 1. 單值二叉樹 力扣965題--

    2024年02月06日
    瀏覽(10)
  • 【數據結構】二叉樹(鏈式)

    【數據結構】二叉樹(鏈式)

    ??作者:日出等日落 ?? 專欄:數據結構 ? ? ? ? ? 抱怨是一件最沒意義的事情。如果實在難以忍受周圍的環(huán)境,那就暗自努力練好本領,然后跳出那個圈子。 目錄 ???二叉樹 ?二叉樹的結構: ??BuyNode(創(chuàng)建二叉樹節(jié)點): ??基本函數操作: ?PreOrder(前序遞歸遍歷):

    2024年02月01日
    瀏覽(17)
  • 【數據結構】二叉樹——鏈式結構

    【數據結構】二叉樹——鏈式結構

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

    2024年02月16日
    瀏覽(28)
  • 數據結構與算法之二叉樹: Leetcode 111. 二叉樹的最小深度 (Typescript版)

    二叉樹的最小深度 https://leetcode.cn/problems/minimum-depth-of-binary-tree/ 描述 就 給定一個二叉樹,找出其最小深度。 最小深度是從根節(jié)點到最近葉子節(jié)點的最短路徑上的節(jié)點數量。 說明:葉子節(jié)點是指沒有子節(jié)點的節(jié)點。 示例 1 示例 2 提示 樹中節(jié)點數的范圍在 [0, 1 0 5 10^5 1 0 5 ] 內

    2024年02月06日
    瀏覽(29)
  • 【算法與數據結構】654、LeetCode最大二叉樹

    【算法與數據結構】654、LeetCode最大二叉樹

    所有的LeetCode題解索引,可以看這篇文章——【算法和數據結構】LeetCode題解。 ?? 思路分析 :【算法與數據結構】106、LeetCode從中序與后序遍歷序列構造二叉樹這兩道題有些類似,相關代碼可以互相參考,本題明示了要用遞歸來做,那么遞歸三要素不可缺少: 輸入參數和返

    2024年02月09日
    瀏覽(23)
  • 【算法與數據結構】226、LeetCode翻轉二叉樹

    【算法與數據結構】226、LeetCode翻轉二叉樹

    所有的LeetCode題解索引,可以看這篇文章——【算法和數據結構】LeetCode題解。 ?? 思路分析 :這道題的思路很簡單,本質上就是遍歷每一個節(jié)點,然后交換左右節(jié)點。我們可以用前中后遍歷或者是層次遍歷法來做,參考這兩篇文章,【算法與數據結構】144、94、145LeetCode二

    2024年02月16日
    瀏覽(18)
  • 【數據結構】二叉樹鏈式結構

    【數據結構】二叉樹鏈式結構

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

    2024年02月03日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包