lintcode70-二叉樹的層次遍歷

  Question70:
  二叉樹的層次遍歷
  給出一棵二叉樹,返回其節點值從底向上的層次序遍歷
     (按從葉節點所在層到根節點所在的層遍歷,然後逐層從左往右遍歷)
 
  樣例
  給一棵二叉樹 {3,9,20,#,#,15,7}
       3
      / \
    9  20
        /  \
     15   7
  [
     [15,7],
     [9,20],
     [3]
   ]

  Solution:


  BSF廣度優先算法,一層一層的進行遍歷
  在上一個題的基礎上,倒序輸出就可以了

public class Q70_binaryTreeLevelOrderTraversal2 {
    
    public List<List<Integer>> levelOrder(TreeNode root) {
        // write your code here
        if(root == null)
            return null;
        List<List<Integer>> result = new ArrayList<List<Integer>>();
        LinkedList<TreeNode> queue = new LinkedList<TreeNode>();
        TreeNode current = null;
        //根元素入隊
        queue.offer(root);
        while(!queue.isEmpty()) {
            List<Integer> currentList = new ArrayList<Integer>();
            //一層元素總數
            int layerCount = queue.size();
            //一次性出隊一層全部元素
            while(layerCount-- != 0) {
                //出隊頭元素並訪問
                current = queue.poll();
                currentList.add(current.val);
                if(current.left != null) {
                    queue.offer(current.left);
                }
                if(current.right != null) {
                    queue.offer(current.right);
                }
            }
            result.add(currentList);
        }
        //,再創建一個集合類,倒序取出,放入就可以了
        /**
         * 此處如果不可以使用集合類
         * 1、如果對空間沒有要求,就再建一個集合類,倒序取放入新的集合類
         * 2、如果對空間有限制,就用臨時變量temp,把result第一個和最後一個對調,依次,及完成反轉
         */
        Collections.reverse(result);
        return result;
    }

    @Test
    public void test() {
        TreeNode root = new TreeNode(3);
        root.left = new TreeNode(9);
        root.right = new TreeNode(20);
        root.right.left = new TreeNode(15);
        root.right.right = new TreeNode(7);
        List<List<Integer>> result = levelOrder(root);
        System.out.println(result.toString());
    }
}


 

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