給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(full binary tree)結構相同,但一些節點為空。
每一層的寬度被定義為兩個端點(該層最左和最右的非空節點,兩端點間的null節點也計入長度)之間的長度。
示例 1:輸入:1
/ \
3 2
/ \ \
5 3 9
輸出: 4
解釋: 最大值出現在樹的第 3 層,寬度為 4 (5,3,null,9)。
示例 2:
輸入:1
/ 3
/ \
5 3
輸出: 2
解釋: 最大值出現在樹的第 3 層,寬度為 2 (5,3)。
示例 3:
輸入:1
/ \3 2
/
5
輸出: 2
解釋: 最大值出現在樹的第 2 層,寬度為 2 (3,2)。
示例 4:
輸入:1
/ \3 2
/ \
5 9
/ \
6 7
輸出: 8
解釋: 最大值出現在樹的第 4 層,寬度為 8 (6,null,null,null,null,null,null,7)。
public class widthofbinarytree
public int widthofbinarytree(treenode root)
/*** deque結構提供了peekfirst和peeklast方法,這是解題所需要的,所以放棄了使用queue結構
* 而且總體來說,deque提供的方法和結構包含了queue和stack,使用起來更方便
*/dequequeue = new linkedlist<>();
queue.offer(new node(root, 1));
int ans = 0;
while (!queue.isempty())
if (cur.node.right != null) }}
return ans;
}}class node
}class treenode
treenode(int val)
treenode(int val, treenode left, treenode right)
}
總結: 使用bfs 廣度優先搜尋,題目需求求解那層個數最多,就可以利用佇列獲取每層首個元素與最後個元素,利用表示式(end - first)+1 為每層個數 -- 核心思想 LeetCode 662 二叉樹最大寬度
給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹 full binary tree 結構相同,但一些節點為空。每一層的寬度被定義為兩個端點 該層最左和最右的非空節點,兩端點間的null節點也計入長度 之間的長度。示例 1 輸入 1 3 2 5 3...
LeetCode662 二叉樹最大寬度
給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹 full binary tree 結構相同,但一些節點為空。每一層的寬度被定義為兩個端點 該層最左和最右的非空節點,兩端點間的null節點也計入長度 之間的長度。示例 1 輸入 1 3 2 5 3...
Leetcode 662 二叉樹最大寬度 C
給定乙個二叉樹,編寫乙個函式來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹 full binary tree 結構相同,但一些節點為空。每一層的寬度被定義為兩個端點 該層最左和最右的非空節點,兩端點間的null節點也計入長度 之間的長度。示例 1 輸入 1 3 2 5 3...