给定二叉树,按照层次去遍历其每一个节点:
//层次遍历
public class LevelOrder {
//主要实现
public List<List<Integer>> levelOrder(TreeNode root) {
//用来保存遍历顺序的集合,每一层用一个集合保存
List<List<Integer>> res = new ArrayList<>();
//用来保存每一层节点
ArrayList<TreeNode> btList = new ArrayList<TreeNode>();
//根节点入列
if (root != null)
btList.add(root);
//如果节点的集合不为空,遍历节点
while (!btList.isEmpty()) {
//用于保存该层的节点的数值
List<Integer> list = new ArrayList<>();
//用于保存下一层的节点
ArrayList<TreeNode> temp = new ArrayList<TreeNode>();
//遍历节点,将数值保存到一个List中
for (TreeNode t : btList) {
list.add(t.val);
//先将该节点的左节点保存到temp中
if (t.left != null) {
temp.add(t.left);
}
//再将右节点保存到temp中
if (t.right != null) {
temp.add(t.right);
}
}
//遍历完成后,将遍历得到的数据集合添加到res
res.add(list);
//将btList清空
btList.clear();
//将下一层的节点添加到btList,继续遍历
btList.addAll(temp);
}
return res;
}
}
2018.11.25
粗略记录二叉树层次遍历,以便不忘记!
网友评论