二叉树层序遍历
二叉树的递归和迭代遍历都是深度优先搜索,而二叉树层序遍历是广度优先搜索
层序遍历一个二叉树,就是从左到右一层一层的去遍历二叉树,队列先进先出,符合一层一层遍历的逻辑,而栈先进后出模拟深度优先遍历也就是递归的逻辑
学完之后你就可以一口气凎完下面十道力扣题目
102. 二叉树的层序遍历
class Solution {//定义嵌套链表public List<List<Integer>> resList = new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {//使用递归法进行BFS//递归方法method1(root,0);return resList;}//递归public void method1(TreeNode root,int deep){//避免空指针异常if(root == null){return;}deep++;while(resList.size() < deep){//说明此时有不为空的数据存在List<Integer> item = new ArrayList<>();//要先创建空的item,再加入resListresList.add(item);}// 把这个写在while循环外的原因是,防止每次遇到// 新的不为空的节点再创建空的item,还有就是为了让// 每一层不为第一个节点时可以添加进链表resList.get(deep - 1).add(root.val);method1(root.left,deep);method1(root.right,deep);}
}
使用队列
队列怎么使用
class Solution {//定义公共嵌套链表public List<List<Integer>> resList = new ArrayList<>();public List<List<Integer>> levelOrder(TreeNode root) {method2(root);return resList;}public void method2(TreeNode root){//防止空指针异常if(root == null){return;}//创建一个队列来遍历二叉树Queue<TreeNode> que = new LinkedList<>();//给队列里面先加入头节点que.offer(root);while(!que.isEmpty()){//创建嵌套链表里面的整型链表List<Integer> tmpList = new ArrayList<>();int len = que.size();while(len > 0){TreeNode tmpNode = que.poll();tmpList.add(tmpNode.val);if(tmpNode.left != null){que.offer(tmpNode.left);}if(tmpNode.right != null){que.offer(tmpNode.right);}len--;}resList.add(tmpList);}}
}
107. 二叉树的层序遍历 II
199. 二叉树的右视图
637. 二叉树的层平均值
429. N 叉树的层序遍历
515. 在每个树行中找最大值
116. 填充每个节点的下一个右侧节点指针
117. 填充每个节点的下一个右侧节点指针 II
104. 二叉树的最大深度
111. 二叉树的最小深度
未完待续