題目描述:
給定一個二叉樹,編寫一個函數來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(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)。
注意: 答案在32位有符號整數的表示範圍內。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/maximum-width-of-binary-tree
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
這道題比較簡單:
使用一個雙端隊列即可,每次進行循環時將首尾的空的去除,然後就可以進行判斷了
代碼;
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int widthOfBinaryTree(TreeNode root) {
if(root == null){
return 0;
}
if(root.left == null && root.right == null ){
return 1;
}
Deque<TreeNode> queue = new LinkedList<>();
queue.offer(root);
int result = 0;
while (!queue.isEmpty()){
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode poll = queue.poll();
if(poll == null){
queue.offer(null);
queue.offer(null);
continue;
}
queue.offer(poll.left);
queue.offer(poll.right);
}
popx(queue);
result = Math.max(result, size);
}
return result;
}
public void popx(Deque<TreeNode> queue){
while (!queue.isEmpty() && queue.getFirst() == null){
queue.removeFirst();
}
while (!queue.isEmpty() && queue.getLast() == null){
queue.removeLast();
}
}
}