日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

leetcode 222. Count Complete Tree Nodes | 222. 完全二叉树的节点个数(Java)

發布時間:2024/2/28 java 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。