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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LeetCode 222. 完全二叉树的节点个数(二分查找)

發布時間:2024/7/5 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LeetCode 222. 完全二叉树的节点个数(二分查找) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 題目

給出一個完全二叉樹,求出該樹的節點個數。

說明:
完全二叉樹的定義如下:在完全二叉樹中,除了最底層節點可能沒填滿外,其余每層節點數都達到最大值,并且最下面一層的節點都集中在該層最左邊的若干位置。若最底層為第 h 層,則該層包含 1~ 2h 個節點。

示例: 輸入: 1/ \2 3/ \ / 4 5 6輸出: 6

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-complete-tree-nodes
著作權歸領扣網絡所有。商業轉載請聯系官方授權,非商業轉載請注明出處。

2. 解題

  • 通用辦法,遍歷即可
class Solution {int count = 0; public:int countNodes(TreeNode* root) {if(root == NULL)return 0;count++;countNodes(root->left);countNodes(root->right);return count;} };

  • 計算包含當前節點在內的左屋檐和右屋檐高度
  • 相等的話,說明是完全二叉樹,直接公式計算
  • 不相等的話,遞歸調用
class Solution {int h, hL, hR; public:int countNodes(TreeNode* root) {if(root == NULL)return 0;hL = leftHeight(root);hR = rightHeight(root);if(hL == hR)return (1<<hL)-1;//或者 pow(2,hL)-1;else//hL > hRreturn 1+countNodes(root->left)+countNodes(root->right);}int leftHeight(TreeNode* root){for(h = 0 ; root; root=root->left)++h;return h;}int rightHeight(TreeNode* root){for(h = 0 ; root; root=root->right)++h;return h;} };

  • 計算某節點的左子的左屋檐 ,右子的左屋檐
  • 左邊 == 右邊,說明左邊是完全的,直接公式
  • 左邊 > 右邊,說明右邊是完全的,直接公式
class Solution {int h, hL, hR; public:int countNodes(TreeNode* root) {if(root == NULL)return 0;hL = Height(root->left);hR = Height(root->right);if(hL == hR)return (1<<hL)+countNodes(root->right);else//hL > hRreturn (1<<hR)+countNodes(root->left);}int Height(TreeNode* root){for(h = 0 ; root; root=root->left)++h;return h;} };

總結

以上是生活随笔為你收集整理的LeetCode 222. 完全二叉树的节点个数(二分查找)的全部內容,希望文章能夠幫你解決所遇到的問題。

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