1. 程式人生 > 其它 >刷題-力扣-222. 完全二叉樹的節點個數

刷題-力扣-222. 完全二叉樹的節點個數

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

題目連結

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/count-complete-tree-nodes
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

題目描述

給你一棵 完全二叉樹 的根節點 root ,求出該樹的節點個數。
完全二叉樹 的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~2h個節點。

示例 1:

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

示例 2:

輸入:root = []
輸出:0

示例 3:

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

提示:

  • 樹中節點的數目範圍是[0, 5 * 104]
  • 0 <= Node.val <= 5 * 104
  • 題目資料保證輸入的樹是 完全二叉樹

進階:遍歷樹來統計節點是一種時間複雜度為 O(n) 的簡單解決方案。你可以設計一個更快的演算法嗎?

題目分析

  1. 根據題目描述,計算二叉樹中節點個數
  2. 使用廣度優先搜尋遍歷每一個節點

程式碼

/**
 * 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:
    int countNodes(TreeNode* root) {
        if (!root) return 0;
        int nodeSum = 0;
        queue<TreeNode*> nodeListQue;
        nodeListQue.push(root);
        while (!nodeListQue.empty()) {
            if (nodeListQue.front()->left) nodeListQue.push(nodeListQue.front()->left);
            if (nodeListQue.front()->right) nodeListQue.push(nodeListQue.front()->right);
            nodeListQue.pop();
            ++nodeSum;
        }
        return nodeSum;
    }
};