题目描述:
给定一个二叉树,返回该二叉树层序遍历的结果,(从左到右,一层一层地遍历)
例如:
给定的二叉树是{3,9,20,#,#,15,7},
该二叉树层序遍历的结果是
[
[3],
[9,20],
[15,7]
]
示例:
输入:{1,2,3,4,#,#,5}
输出{{1},{2,3},{4,5}}
知识点:
1.实现List接口:
LinkedList:低层数据结构是一个双向链表,方便插入和删除操作,易于随机访问。
addLast:是LIinkedList在表尾添加元素。
pollFirst:是LIinkedList在表头删除元素
ArrayList:底层数据结构是顺序表,存储数组。
算法思想:
首先判断root是否为空,如果为空则返回一个空数组
如果非空,定义一个LinkedList对象stack
再定义一个ArrayList对象al用来存放ArrayList类型
把root添加到stack表尾因为他要第一个输出,所以用尾添加法
如果链表非空则再定义一个ArrayList对象,list
while循环(stack.size()>0)
定义树节点tmp存放stack检索删除的第一个节点
把tmp的值添加到list,然后判断tmp左右孩子是否为空
若非空则把左右孩子添加到stack中
把list添加到al中
最后输出al
public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
if (root==null){return new ArrayList<>();}
LinkedList<TreeNode> stack = new LinkedList<>();
ArrayList<ArrayList<Integer>> al = new ArrayList<>();
stack.addLast(root);
while(!stack.isEmpty())
{
int n = stack.size();
ArrayList<Integer> list = new ArrayList<>();
while(n-->0)
{
//pollFist()检索并删除链表中第一个节点
TreeNode tmp = stack.pollFirst();
list.add(tmp.val);
if(tmp.left!=null)
stack.addLast(tmp.left);
if(tmp.right!=null)
stack.addLast(tmp.right);
}
//
al.add(new ArrayList<>(list));
}
return al;
// write code here
}