【LeetCode刷題(中等程度)】662. 二叉樹最大寬度
給定一個二叉樹,編寫一個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(full binary tree)結構相同,但一些節點為空。
每一層的寬度被定義為兩個端點(該層最左和最右的非空節點,兩端點間的null節點也計入長度)之間的長度。
示例 1:
輸出: 4
解釋: 最大值出現在樹的第 3 層,寬度為 4 (5,3,null,9)。
來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/maximum-width-of-binary-tree
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。
思路:給每個節點編號,根節點為1,如果當前節點有左孩子,那麼這個左孩子的值為2*cur->val
,如果這個節點有右孩子,那麼這個右孩子對應的值為2*cur->val+1
。但是在C++裡用Long值記錄會溢位。所以我們每一層都從1
開始計數(只要減去上一層最後一個值就可以了)
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode() : val(0), left(nullptr), right(nullptr) {}
* TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
* TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
* };
*/
class Solution {
public:
int widthOfBinaryTree(TreeNode* root) {
if(!root)
return 0;
queue<TreeNode*> q;
root->val = 1;
q.push(root);
int ans = 0;
while(!q.empty())
{
ans = max(q.back()->val - q.front()->val + 1,ans);
int tmp = q.front()->val - 1;
int size = q.size();
for(int i = 0;i < size;++i)
{
TreeNode* cur = q.front();
cur->val -= tmp;//減去上一層最後一個值
if(cur->left)
{
cur->left->val = 2*cur->val;
q.push(cur->left);
}
if(cur->right)
{
cur->right->val = 2*cur->val +1;
q.push(cur->right);
}
q.pop();
}
}
return ans;
}
};
相關文章
- 【LeetCode刷題(中等程度)】946. 驗證棧序列LeetCode
- 1501 二叉樹最大寬度和高度二叉樹
- 二叉樹的最小高度,最大高度(深度)和寬度二叉樹
- 二叉樹----寬度計算二叉樹
- leetcode 刷題視訊(5) - 二叉樹與圖LeetCode二叉樹
- 二叉樹的深度、寬度遍歷及平衡樹二叉樹
- LeetCode每日一題:二叉樹的最大深度(No.104)LeetCode每日一題二叉樹
- JavaScript實現-LeetCode刷題-【對稱二叉樹】-第101題!!!JavaScriptLeetCode二叉樹
- 二叉樹的右檢視 (中等)二叉樹
- 【刷題】二叉樹非遞迴遍歷二叉樹遞迴
- LeetCode 104.二叉樹的最大深度LeetCode二叉樹
- DIV+CSS相容解決DIV最大寬度和最小寬度問題CSS
- 【LeetCode刷題(困難程度)】132. 分割回文串 IILeetCode
- Leetcode刷題筆記 501. 二叉搜尋樹中的眾數LeetCode筆記
- 【echarts】柱狀圖設定固定寬度(最大寬度)Echarts
- [Golang]力扣Leetcode—初級演算法—樹—二叉樹的最大深度Golang力扣LeetCode演算法二叉樹
- 【Leetcode刷題篇】leetcode152 乘積最大陣列LeetCode陣列
- Leetcode刷題628. 三個數的最大乘積LeetCode
- 【刷題筆記】LeetCode-53 最大子陣列和筆記LeetCode陣列
- 【LeetCode-二叉樹】二叉樹前序遍歷LeetCode二叉樹
- 建立二叉樹:層次遍歷--樹的寬度高度,後序遍歷--祖先節點二叉樹
- 夜刷:平衡二叉樹的基本操作二叉樹
- 刷題系列 - Python判斷是否映象對稱二叉樹Python二叉樹
- leetcode 每日一題 617 合併二叉樹LeetCode每日一題二叉樹
- 【Leetcode千題】617. 合併二叉樹LeetCode二叉樹
- 二叉樹的最大/最小深度二叉樹
- 二叉樹最大距離(直徑)二叉樹
- 【10月打卡~Leetcode每日一題】18. 四數之和(難度:中等)LeetCode每日一題
- LeetCode 124. 二叉樹中的最大路徑和 | PythonLeetCode二叉樹Python
- 二叉樹任意兩個節點間的最大距離(Java,LeetCode 543二叉樹的直徑 遞迴)二叉樹JavaLeetCode遞迴
- LeetCode題解(Offer26):判斷二叉樹A是否為二叉樹B的子樹(Python)LeetCode二叉樹Python
- 刷題系列 - Python用遞迴實現求二叉樹深度Python遞迴二叉樹
- 刷題系列 - Python實現二叉樹按層級遍歷Python二叉樹
- Leetcode 二叉樹題目集合 (看完這個面試不會做二叉樹題,辣條給你!!!!!)LeetCode二叉樹面試
- 用jquery控制圖片的最大寬度jQuery
- Leetcode 題解系列 -- 對稱二叉樹(遞迴)LeetCode二叉樹遞迴
- LeetCode 對稱二叉樹LeetCode二叉樹
- LeetCode刷題整理LeetCode