1. 程式人生 > >[LeetCode]662. Maximum Width of Binary Tree判斷樹的寬度

[LeetCode]662. Maximum Width of Binary Tree判斷樹的寬度

數據 left 層序遍歷 pty 添加 當前 body maximum emp

public int widthOfBinaryTree(TreeNode root) {
        /*
        層序遍歷+記錄完全二叉樹的坐標,左孩子2*i,右孩子2*i+1
        而且要有兩個變量,一個記錄本層節點數,一個記錄下層節點數
        層序遍歷用隊列實現
        還要有一個隊列記錄本層的下標
         */
        //層序遍歷記錄節點
        Queue<TreeNode> tree = new LinkedList<>();
        //記錄每個節點的位置,用來判斷此節點的孩子的坐標
        Queue<Integer> index = new
LinkedList<>(); //當前層數量和下一層數量 int cur = 1; int next = 0; //本層開始坐標和結束坐標 int sta = 1; int end = 1; //記錄結果 int res = 0; tree.offer(root); index.offer(1); while (!tree.isEmpty()) { //當前節點和坐標 TreeNode curTree = tree.poll(); end
= index.poll(); //添加左子樹和坐標 if (curTree.left!=null) { tree.offer(curTree.left); next++; index.offer(end*2); } //添加右子樹和坐標 if (curTree.right!=null) { tree.offer(curTree.right); next
++; index.offer(end*2+1); } //本層待遍歷節點數-1 cur--; //本層遍歷完畢,更新結果和下一層數據 if (cur==0) { res = Math.max(res,end-sta+1); cur = next; next = 0; sta = index.isEmpty()?1:index.peek(); } } return res; }

[LeetCode]662. Maximum Width of Binary Tree判斷樹的寬度