题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
import java.util.ArrayList;
/**
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<TreeNode> listTree=new ArrayList<TreeNode>();
ArrayList<Integer> list=new ArrayList<Integer>();
TreeNode temp;
if(root==null) {
return list;
}
listTree.add(root);
while(!listTree.isEmpty()) {
temp=listTree.remove(0);
list.add(temp.val);
if(temp.left!=null) {
listTree.add(temp.left);
}
if(temp.right!=null) {
listTree.add(temp.right);
}
}
return list;
}
}
在二叉树中,有四种遍历方式:前序遍历/中序遍历/后序遍历/层次遍历
这道题目考的就是层次遍历:
核心主要是在于使用链表的方式,进行层次排序:
举例子:
假设有这个一个二叉树:
首先listTrees.add(),加入根结点,
这时候listTrees的数据如下:
然后进入while循环:
移除listTrees的第一个结点-->root结点,分别加入root的左结点和右结点;
这时候listTrees的数据如下:
然后移除2结点,加入它的左右结点;
这时候listTrees的数据如下:
然后移除3结点,加入它的左右结点;
这时候listTrees的数据如下:
然后结果就出来了;
注意的是移除的结点值保存到list返回值中;