LeetCode-222-完全二叉樹的節點個數
阿新 • • 發佈:2022-04-16
完全二叉樹的節點個數
題目描述:給你一棵 完全二叉樹 的根節點 root ,求出該樹的節點個數。
完全二叉樹 的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其餘每層節點數都達到最大值,並且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~ \(2^{h}\) 個節點。
示例說明請見LeetCode官網。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/count-complete-tree-nodes/
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
解法一:二叉樹的層序遍歷
對二叉樹層序遍歷,按從上到下、從左到右的順序遍歷二叉樹,其中利用了佇列先進先出的特點。具體處理過程如下:
- 首先如果根節點為空,即為空樹,說明沒有節點,直接返回0;
- 否則,先將根節點新增到佇列中,然後遍歷佇列中的節點,直到佇列為空,遍歷過程中記錄節點的數目。
最後返回節點數。
import com.kaesar.leetcode.TreeNode; import java.util.LinkedList; import java.util.Queue; public class LeetCode_222 { /** * 二叉樹層序遍歷 * * @param root * @return */ public static int countNodes(TreeNode root) { // 如果根節點為空,即為空樹,說明沒有節點,直接返回0 if (root == null) { return 0; } // 利用佇列先進先出的特性,對二叉樹進行層序遍歷 Queue<TreeNode> nodes = new LinkedList<>(); // 首先將根節點新增到佇列中,作為第一層 nodes.add(root); // 記錄二叉樹的節點數 int count = 0; // 遍歷佇列中的節點,直到佇列為空 while (!nodes.isEmpty()) { count++; TreeNode cur = nodes.poll(); if (cur.left != null) { nodes.add(cur.left); } if (cur.right != null) { nodes.add(cur.right); } } return count; } public static void main(String[] args) { /** * 測試用例: * 1 * 2 3 * 4 5 6 */ TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.left.right = new TreeNode(5); root.right.left = new TreeNode(6); // 期望輸出: 6 System.out.println(countNodes(root)); } }
【每日寄語】 大丈夫行事,當磊磊落落,如日月皎然。