二叉树的层序遍历
给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层序遍历结果:
[
[3],
[9,20],
[15,7]
]
树的定义:
publicclassTreeNode{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;}}
使用队列,并维护队列。
classSolution{public List<List<Integer>>levelOrder(TreeNode root){
List<List<Integer>> res=newArrayList<List<Integer>>();if(root== null){return res;}
LinkedList<TreeNode> queue=newLinkedList<>();
queue.addLast(root);while(!queue.isEmpty()){// 单层的结果list
List<Integer> level=newArrayList<>();// 每层的数量int size= queue.size();for(int i=0; i< size; i++){
root= queue.removeFirst();
level.add(root.val);// 左右子树入队列if(root.left!= null){
queue.addLast(root.left);}if(root.right!= null){
queue.addLast(root.right);}}
res.add(level);}return res;}}
数组生成二叉树
示例:
二叉树:[3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
public TreeNodelevelOrder(Integer[] input){
TreeNode root=newTreeNode(input[0]);
Queue<TreeNode> nodeQueue=newLinkedList<>();
nodeQueue.add(root);int index=1;while(!nodeQueue.isEmpty()){
TreeNode node= nodeQueue.remove();if(index== input.length){break;}
Integer item= input[index++];if(item!= null){
node.left=newTreeNode(item);
nodeQueue.add(node.left);}if(index== input.length){break;}
item= input[index++];if(item!= null){
node.right=newTreeNode(item);
nodeQueue.add(node.right);}}return root;}