日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

完全二叉树最小深度_二叉树:我有多少个节点?

發布時間:2025/3/20 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 完全二叉树最小深度_二叉树:我有多少个节点? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給「代碼隨想錄」一個星標吧!?

不管有多少個節點,大家中秋&&國慶快樂哈

?

如果之前兩篇二叉樹:看看這些樹的最大深度, 二叉樹:看看這些樹的最小深度都認真看了的話,這道題目可以分分鐘刷掉了,愉快過節!

222.完全二叉樹的節點個數

給出一個完全二叉樹,求出該樹的節點個數。

示例:

思路

這道題目其實沒有必要強調是完全二叉樹,就是求二叉樹節點的個數。

依然可以使用遞歸法和迭代法來解決。

這道題目的遞歸法和求二叉樹的深度寫法類似, 而迭代法:二叉樹層序遍歷模板稍稍修改一下,記錄遍歷的節點數量就可以了。

遞歸遍歷的順序依然是后序(左右中)。

遞歸

如果對求二叉樹深度還不熟悉的話,看這篇:二叉樹:看看這些樹的最大深度。

  • 確定遞歸函數的參數和返回值:參數就是傳入樹的根節點,返回就返回以該節點為根節點二叉樹的節點數量,所以返回值為int類型。
  • 代碼如下:

    int?getNodesNum(TreeNode*?cur)?{
  • 確定終止條件:如果為空節點的話,就返回0,表示節點數為0。
  • 代碼如下:

    if?(cur?==?NULL)?return?0;
  • 確定單層遞歸的邏輯:先求它的左子樹的節點數量,再求的右子樹的節點數量,最后取總和再加一 (加1是因為算上當前中間節點)就是目前節點為根節點的節點數量。
  • 代碼如下:

    int?leftNum?=?getNodesNum(cur->left);??????//?左
    int?rightNum?=?getNodesNum(cur->right);????//?右
    int?treeNum?=?leftNum?+?rightNum?+?1;??????//?中
    return?treeNum;

    所以整體C++代碼如下:

    class?Solution?{
    private:
    ????int?getNodesNum(TreeNode*?cur)?{
    ????????if?(cur?==?0)?return?0;
    ????????int?leftNum?=?getNodesNum(cur->left);??????//?左
    ????????int?rightNum?=?getNodesNum(cur->right);????//?右
    ????????int?treeNum?=?leftNum?+?rightNum?+?1;??????//?中
    ????????return?treeNum;
    ????}
    public:
    ????int?countNodes(TreeNode*?root)?{
    ????????return?getNodesNum(root);
    ????}
    };

    代碼精簡之后C++代碼如下:

    class?Solution?{
    public:
    ????int?countNodes(TreeNode*?root)?{
    ????????if?(root?==?NULL)?return?0;
    ????????return?1?+?countNodes(root->left)?+?countNodes(root->right);
    ????}
    };

    迭代法

    如果對求二叉樹層序遍歷還不熟悉的話,看這篇:二叉樹:層序遍歷登場!。

    那么只要模板少做改動,加一個變量result,統計節點數量就可以了

    class?Solution?{
    public:
    ????int?countNodes(TreeNode*?root)?{
    ????????queue?que;if?(root?!=?NULL)?que.push(root);
    ????????int?result?=?0;while?(!que.empty())?{
    ????????????int?size?=?que.size();for?(int?i?=?0;?i?????????????????TreeNode*?node?=?que.front();
    ????????????????que.pop();
    ????????????????result++;???//?記錄節點數量if?(node->left)?que.push(node->left);if?(node->right)?que.push(node->right);
    ????????????}
    ????????}return?result;
    ????}
    };

    總結

    這道題目的解法其實我們在二叉樹:看看這些樹的最大深度和 二叉樹:看看這些樹的最小深度都有提到過了。

    一樣的分析套路,代碼也差不多,估計此時大家最這一類求二叉樹節點數量以及求深度應該非常熟練了。

    沒有做過這道題目的同學可以愉快的刷了它。

    最后祝大家中秋&&國慶節日愉快哈!

    在留言區留下你的思路吧!

    -------end-------

    我將算法學習相關的資料已經整理到了Github :https://github.com/youngyangyang04/leetcode-master,里面還有leetcode刷題攻略、各個類型經典題目刷題順序、思維導圖看一看一定會有所收獲,如果給你有幫助給一個star支持一下吧!

    另外因為公眾號改版,時間線被打亂,一些精彩文章大家可能錯過了。如果感覺這里的文章對你有幫助,趕緊給「代碼隨想錄」加一個星標吧,方便第一時間閱讀文章往期精彩回顧二叉樹:看看這些樹的最小深度二叉樹:看看這些樹的最大深度二叉樹:我對稱么?本周小結!(二叉樹)二叉樹:你真的會翻轉二叉樹么?二叉樹:層序遍歷登場!二叉樹:前中后序迭代方式的寫法就不能統一一下么?二叉樹:聽說遞歸能做的,棧也能做!二叉樹:一入遞歸深似海,從此offer是路人關于二叉樹,你該了解這些!「代碼隨想錄」期待你的關注!

    每天8:35準時推送一道經典算法題目,推送的每道題目都不是孤立的,而是由淺入深,環環相扣,幫你梳理算法知識脈絡,輕松學算法!

    刷題可以加我微信!右邊為個人微信,添加時備注:「簡單自我介紹」+「組隊刷題」我就知道你[在看]

    總結

    以上是生活随笔為你收集整理的完全二叉树最小深度_二叉树:我有多少个节点?的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。