二叉树的层序遍历
给你二叉树的根节点 root ,返回其节点值的 层序遍历 。 (即逐层地,从左到右访问所有节点)。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:[[3],[9,20],[15,7]]
示例 2:
输入:root = [1]
输出:[[1]]
示例 3:
输入:root = []
输出:[]
提示:
树中节点数目在范围 [0, 2000] 内
-1000 <= Node.val <= 1000
作者:力扣 (LeetCode)
链接:https://leetcode.cn/leetbook/read/top-interview-questions-easy/xnldjj/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
第一种方法:广度遍历BFS
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
//返回数组
List<List<Integer>> result = new ArrayList<>();
//队列
Queue<TreeNode> queue = new LinkedList<>();
//返回特殊情况
if(root==null) return result;
//添加根节点
queue.add(root);
//循环遍历当队列不为空的时候
while(!queue.isEmpty()){
//子树节点数
int levelNum = queue.size();
//每一层的列表数据
List<Integer> subList = new ArrayList();
//循环遍历子树节点
for(int i=0;i<levelNum;i++){
//取出队列
TreeNode node = queue.poll();
//添加每一层的数据
subList.add(node.val);
if(node.left!=null){
queue.add(node.left);
}
if(node.right!=null){
queue.add(node.right);
}
}
//添加每一层次数据
result.add(subList);
}
return result;
}
}
第二种方法:深度优先遍历DFS
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
//返回数组
List<List<Integer>> result = new ArrayList<>();
cengcibianli(result,root,0);
return result;
}
public void cengcibianli(List<List<Integer>> result,TreeNode root,int level){
//排除特殊情况
if(root==null)return;
//判断是否到下一层
if(level>=result.size()){
result.add(new ArrayList());
}
//添加元素
result.get(level).add(root.val);
//递归体
cengcibianli(result,root.left,level+1);
cengcibianli(result,root.right,level+1);
}
}