import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
import java.util.Queue;
/*
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
*/
public class 二叉树的层序遍历 {
public static void main(String[] args) {
TreeNode node4=new TreeNode(15);
TreeNode node5=new TreeNode(7);
TreeNode node3=new TreeNode(20,node4,node5);
TreeNode node2=new TreeNode(9);
TreeNode node1=new TreeNode(3,node2,node3);
List<List<Integer>> lists = levelOrder(node1);
for (List<Integer> list:lists) {
System.out.println(list.toString());
}
}
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<List<Integer>>();
Queue<TreeNode> queue=new ArrayDeque<TreeNode>();
if (root!=null)
queue.add(root);
while (!queue.isEmpty()){
List<Integer> levelVal = new ArrayList<>();
int len=queue.size();
for (int i=0;i<len;i++){//上一层有几个节点遍历几次
TreeNode node = queue.poll();
levelVal.add(node.val);
if (node.left!=null)
queue.add(node.left);
if (node.right!=null)
queue.add(node.right);
}
res.add(levelVal);
}
return res;
}
}
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;
}
}
二叉树的层序遍历Java实现
最新推荐文章于 2023-05-18 11:57:48 发布