107. Binary Tree Level Order Traversal II

來源:互聯網
上載者:User

標籤:tom   bottom   image   val   roo   一個   arraylist   節點   dex   

一、題目

  1、審題

  2、分析

    給出一個二叉樹,從下往上輸出每一層的節點值。

 

二、解答

  1、思路:

    方法一、BFS

      利用一個隊列進行層次遍曆,同時 List 進行插入時,利用 add(index, val) 方法, index 指定插入的 List 的下標。

public List<List<Integer>> levelOrderBottom(TreeNode root) {                    List<List<Integer>> resultList = new LinkedList<>();        if(root == null)            return resultList;                Queue<TreeNode> queue = new LinkedList<>();        queue.add(root);        while(!queue.isEmpty()) {            List<Integer> list = new LinkedList<>();            int size = queue.size();            for (int i = 0; i < size; i++) {                TreeNode node = queue.poll();                list.add(node.val);                if(node.left != null)                    queue.add(node.left);                if(node.right != null)                    queue.add(node.right);            }            resultList.add(0, list);        }                return resultList;    }

 

  方法二、DFS

    採用遞迴進行層次遍曆,從上往下存於一個 List 中,最後對 List 進行翻轉。

public List<List<Integer>> levelOrderBottom2(TreeNode root) {                List<List<Integer>> resultList = new ArrayList<List<Integer>>();        helperLevelOrderBottom(root, 0, resultList);                List<List<Integer>> tmpList = new LinkedList<>();        for (int i = resultList.size() - 1; i >= 0; i--)             tmpList.add(resultList.get(i));                return tmpList;    }        private void helperLevelOrderBottom(TreeNode root, int height,            List<List<Integer>> resultList) {                if(root == null)            return;                if(resultList.size() <= height)            resultList.add(new ArrayList<Integer>());        resultList.get(height).add(root.val);                helperLevelOrderBottom(root.left, height+1, resultList);        helperLevelOrderBottom(root.right, height+1, resultList);            }

 

  最佳化,調用 helper 方法時,直接將節點值插入對應的從下向上的 List 的對應的位置。

public List<List<Integer>> levelOrderBottom3(TreeNode root) {                List<List<Integer>> resultList = new ArrayList<List<Integer>>();        helperLevelOrderBottom2(root, 0, resultList);                return resultList;    }        private void helperLevelOrderBottom2(TreeNode root, int level, List<List<Integer>> resultList) {                if(root == null)            return;                if(resultList.size() <= level)    // 在 List 頭插入            resultList.add(0, new ArrayList<Integer>());        //        resultList.get(0).add(root.val);    Wrong, is DFS        resultList.get(resultList.size() - level - 1).add(root.val);        helperLevelOrderBottom2(root.left, level + 1, resultList);        helperLevelOrderBottom2(root.right, level + 1, resultList);    }

 

107. Binary Tree Level Order Traversal II

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.