从上往下遍历二叉树
题目:
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
解题思路:
广度优先算法。
利用队列的先进先出特性,用一个队列存放 根结点
进入while语句 将根结点取出队列 ,再用一个数组将遍历顺序存起来
然后判断其左结点是否为空,否 将左结点存入队列,是,什么也不做,
再判断 右结点,操作和左结点一样 ,
进入下一次循环,判断队列中第一个结点的左右结点是否为空
最后 如果队列为空结束循环
代码实现
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public int[] levelOrder(TreeNode root) {
if(root==null)return new int[0];
// TreeNode left = root.left, right = root.right;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
List<Integer> list = new ArrayList<>();
while(!queue.isEmpty()){
TreeNode node = queue.poll();
list.add(node.val);
if(node.left!=null)queue.add(node.left);
if(node.right!=null)queue.add(node.right);
}
int[] arr = new int[list.size()];
for(int i=0;i<list.size();i++){
arr[i] = list.get(i);
}
return arr;
}
}
什么是广度优先算法?
与深度优先算法不同,广度优先算法从上往下开始,同时访问父结点 ,左孩子,右孩子,然后再进入下一层,直到访问完所有结点。
广撒网,体现一个广字。