知识点:
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;
}
}