利用队列存储下一层结构
package binarytree.levelOrder.inordertraversal;
import binarytree.untils.GenerateTreeNode;
import binarytree.untils.TreeNode;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
/**
* 给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
* <p>
* <p>
* <p>
* 示例:
* 二叉树:[3,9,20,null,null,15,7],
* <p>
* 3
* / \
* 9 20
* / \
* 15 7
* 返回其层序遍历结果:
* <p>
* [
* [3],
* [9,20],
* [15,7]
* ]
*/
public class LevelOrder {
/**
* 层序遍历
* <p>
* 1,2,3,4,5,6,7,8,9
* <p>
* 1,2,3,4,5,6,7,8,9
* <p>
* 思路,一层一层遍历,一边构建队列,一边记录上一层的数字
*
* @param root
* @return
*/
public static List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> re = new ArrayList<>();
if (root == null) {
return re;
}
Queue<TreeNode> queue = new LinkedList();
queue.offer(root);
while (!queue.isEmpty()) {
List<Integer> res = new ArrayList<>();
int size = queue.size();//这里要用变量,否则 queue是动态变化的,无法确定循环次数
for (int i = 0; i < size; i++) {
TreeNode treeNode = queue.poll();
res.add(treeNode.val);
if (treeNode.left != null) {
queue.add(treeNode.left);
}
if (treeNode.right != null) {
queue.add(treeNode.right);
}
}
re.add(res);
}
return re;
}
public static void main(String[] args) {
Integer[] nums = {1, 2, 3, 4, 5, 6, 7};
TreeNode treeNode = GenerateTreeNode.generateTreeNode(nums);
levelOrder(treeNode);
System.out.println();
}
}
不会,我可以学;落后,我可以追赶;跌倒,我可以站起来!