leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                題目
https://leetcode.com/problems/count-complete-tree-nodes/
 
題解
思路參考左程云《程序員代碼面試指南》
 
 
 
 
順便貼一下草稿
代碼
class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) {this.val = val;}TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;} }class Solution {public int countNodes(TreeNode root) {if (root == null) return 0;int height = 0;TreeNode node = root;while (node != null) {node = node.left;height++;}return bs(root, 1, height);}/*** 計算以node為根的樹的節點數量 = 左子樹節點數量 + 右子樹節點數量 + node節點本身** @param d current depth* @param h height*/public int bs(TreeNode node, int d, int h) {if (node == null) return 0;int rDepth = d; // 右子樹的最左節點的深度TreeNode rNode = node.right;while (rNode != null) {rDepth++;rNode = rNode.left;}if (rDepth == h) // 情況1:node左子樹為滿二叉樹(可用公式計算節點個數),右子樹繼續遞歸計算return (1 << (h - d) - 1) + bs(node.right, d + 1, h) + 1;else // 情況2:node右子樹為滿二叉樹(可用公式計算節點個數),左子樹繼續遞歸return (1 << (h - d - 1)) - 1 + bs(node.left, d + 1, h) + 1;} }總結
以上是生活随笔為你收集整理的leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: vscode 经过跳板机,连接到内网服务
- 下一篇: leetcode 223. Rectan
