leetcode----給定一個二叉樹,返回該二叉樹由底層到頂層的層序遍歷,(從左向右,從葉子節點到根節點,一層一層的遍歷)

C.&H.發表於2020-10-01

知識點:

1.list.add(下標,值)。

每次在下標0處插入元素時,自動將列表中的元素後移

例如,依次向列表中的0位置插入12 13 14

import java.util.ArrayList;

public class TestOne {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ArrayList<Integer> list = new ArrayList<Integer>();
		list.add(0,12);
		for(int i=0;i<list.size();i++) {
			System.out.println("插入值12。 下標:"+i+" 值:"+list.get(i));
		}
		System.out.println("-----------");
		list.add(0,13);
		for(int i=0;i<list.size();i++) {
			System.out.println("插入值13。 下標:"+i+" 值:"+list.get(i));
		}
		System.out.println("-----------");
		list.add(0,14);
		for(int i=0;i<list.size();i++) {
			System.out.println("插入值14。 下標:"+i+" 值:"+list.get(i));
		}
		System.out.println("-----------");
	}

}

import java.util.*;

/*
 * public class TreeNode {
 *   int val = 0;
 *   TreeNode left = null;
 *   TreeNode right = null;
 * }
 */

public class Solution {
    /**
     * 
     * @param root TreeNode類 
     * @return int整型ArrayList<ArrayList<>>
     思路: 通過佇列和棧來實現
         1. 從根節點開始,按從右向左的順序,對二叉樹進行層次遍歷
         2. 將訪問的結果放入棧中(從右至左,從上到下)
         3. 最後,將棧中的所有元素出棧,得到逆序的遍歷結果(從左至右,從下到上)
     */
    public ArrayList<ArrayList<Integer>> levelOrderBottom (TreeNode root) {
        //1.建立列表陣列
        ArrayList<ArrayList<Integer>> AllList = new ArrayList<>();
        //2.樹為空
        if(root==null){
            return AllList;
        }
        //3.建立list列表,類似於佇列。
        ArrayList<TreeNode> list = new ArrayList<>();
        list.add(root);//先將根節點加入列表
        while(list.size()!=0){ //佇列不為空
            //存放當前層遍歷的結果
            ArrayList<Integer> l = new ArrayList<>();
            int size = list.size(); //當前層的結點數目
            for(int j=0;j<size;j++){//遍歷當前層的結點,並將其所有的孩子結點放入list
                TreeNode node = list.remove(0);//獲取list中的第一個元素,並從list刪除
                l.add(node.val);
                if(node.left!=null) list.add(node.left);
                if(node.right!=null) list.add(node.right);
            }//for
            //將當前層的遍歷結果 放入結果集中的第一個位置
            AllList.add(0,l);
        }//for
        return AllList;
    }
}

相關文章