103. Binary Tree Zigzag Level Order Traversal

來源:互聯網
上載者:User

標籤:數組   題目   輸出   lin   null   roo   個數   i++   return   

一、題目

  1、審題

  2、分析

    給出一棵二叉樹,以“之"字形層序輸出二叉樹的結點值。

 

二、解答

  1、思路:

    方法一、

      採用一個隊列進行層次遍曆,遍曆每一層時,將每一層結點放入一個數組,用一個標誌 flag 記錄向左或向右的訪問順序,並將符合的層次的結點訪問順序記錄在 List 中。

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {                List<List<Integer>> resultList = new ArrayList<List<Integer>>();        if(root == null)            return resultList;                Queue<TreeNode> queue = new LinkedList<TreeNode>();        queue.add(root);                boolean is_Left2Right = true;        while(!queue.isEmpty()) {            int size = queue.size();            List<Integer> list = new ArrayList<>();                        TreeNode[] arr = new TreeNode[size];            for (int i = 0; i < size; i++) {                arr[i] = queue.poll();                 if(arr[i].left != null)                    queue.add(arr[i].left);                if(arr[i].right != null)                     queue.add(arr[i].right);            }            if(!is_Left2Right) {                // 從右向左添加                for (int i = size - 1; i >= 0; i--)                     list.add(arr[i].val);            }            else {                // 從左向右添加                for (int i = 0; i < size; i++)                     list.add(arr[i].val);                                }            is_Left2Right = !is_Left2Right;    // 換一個方向            resultList.add(list);                }                return resultList;    }

 

  方法二、

    採用遞迴進行層次遍曆;

    遍曆時,若為奇數行,則是從右向左添加元素,若是偶數行,則是從左向右添加元素;

public List<List<Integer>> zigzagLevelOrder(TreeNode root) {        List<List<Integer>> resultList = new ArrayList<List<Integer>>();        if(root == null)            return resultList;                zigzagHelper(resultList, root, 0);                return resultList;    }        private void zigzagHelper(List<List<Integer>> resultList, TreeNode root, int height) {                if(root == null)            return;                if(height >= resultList.size())            resultList.add(new ArrayList<Integer>());                if(height % 2 == 0)    //    0、2、4             resultList.get(height).add(root.val);        else             resultList.get(height).add(0, root.val);                    zigzagHelper(resultList, root.left, height+1);        zigzagHelper(resultList, root.right, height+1);    }

 

103. Binary Tree Zigzag Level Order Traversal

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.