刷題-力扣-222. 完全二叉樹的節點個數
阿新 • • 發佈:2021-06-27
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) 的簡單解決方案。你可以設計一個更快的演算法嗎?
題目分析
- 根據題目描述,計算二叉樹中節點個數
- 使用廣度優先搜尋遍歷每一個節點
程式碼
/** * 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; } };