完全二叉树的节点数
目錄
- Leecode.222完全二叉樹的節點數
- 思路分析
- 層序遍歷_迭代
- 遞歸_二叉樹的遍歷
- 迭代_二叉樹的遍歷
Leecode.222完全二叉樹的節點數
給你一棵 完全二叉樹 的根節點 root ,求出該樹的節點個數。
完全二叉樹 的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,并且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~ 2h 個節點。
示例 1:
輸入:root = [1,2,3,4,5,6]
輸出:6
示例 2:
輸入:root = []
輸出:0
示例 3:
輸入:root = [1]
輸出:1
思路分析
這其實是非常簡單的一道題,博主用了三分鐘就寫完了,就是層序遍歷嘛,就算題目是N叉樹數的節點數還是用層序遍歷,若不懂層序遍歷,請轉博客二叉樹的層序遍歷。
層序遍歷_迭代
class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);int result = 0;while(!queue.isEmpty()) {int size = queue.size();for (int i = 0 ; i < size ; i++) {//每次彈出一個節點,result+1result ++;TreeNode cur = queue.peek();queue.poll();if (cur.left != null) queue.offer(cur.left);if (cur.right != null) queue.offer(cur.right);}}return result;} }當然,我們也可以使用前中序遍歷來完成這道題,我們只需要稍微修改一下二叉樹的遍歷代碼即可
我們用后序遍歷來寫這道題比較方便
遞歸_二叉樹的遍歷
class Solution {public int countNodes(TreeNode root) {return countNum(root);}int countNum(TreeNode root) {if (root == null) return 0;int leftNum = countNum(root.left);int rightNum = countNum(root.right);int Num = 1 + leftNum + rightNum; return Num;} }其實寫代碼的時候,并不建議大家使用遞歸,因為我們這些學生大多數對于遞歸只停留在會使用,更深層次的理解和運用很容易出錯,相對于迭代而言,簡單多了。
迭代_二叉樹的遍歷
class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;Queue<TreeNode> queue = new LinkedList<TreeNode>();queue.offer(root);int result = 0;while (!queue.isEmpty()) {TreeNode cur = queue.peek();queue.poll();result++;if (cur.left != null) queue.offer(cur.left);if (cur.right != null) queue.offer(cur.right);}return result;} }在做任何關于二叉樹的題的時候,中序遍歷其實都是用的比較少的,前序和后序,相對比較多。
若有誤,請指教!!
總結
- 上一篇: 锤子ROM那些欠缺考虑的微创新们
- 下一篇: 网站权重