271、二叉樹的最大寬度

題目描述:
給定一個二叉樹,編寫一個函數來獲取這個樹的最大寬度。樹的寬度是所有層中的最大寬度。這個二叉樹與滿二叉樹(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();
        }


    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章