使用队列来实现二叉树的层序遍历

140 阅读1分钟

1.思路

  • 首先要定义好数据结构,该问题的数据结构是[[],[],[],...]
  • 然后是用队列来存储每一层的指针
  • 队列不空,就循环地将每一层的数据一个一个地存入中间缓存的数组,并将树节点不空左孩子右孩子存入队列中。
  • 队列为空,表示遍历完所有的数据。

2.代码

import java.util.*;
public class TreeNode {
    int val = 0;//自身的值
    TreeNode left = null;//左孩子的地址
    TreeNode right = null;//右孩子的地址
  }
public class Solution {
    public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {
       ArrayList<ArrayList<Integer>> result = new  ArrayList<ArrayList<Integer>>();
       if(root==null){
           return result;//没有数据,就返回空值的结构
       }
        Queue<TreeNode> queue = new LinkedList<TreeNode>();
        queue.add(root);//根节点的指针
        while(!queue.isEmpty()){
            ArrayList<Integer> res = new ArrayList<Integer>();//存放每一层的数值
            int n = queue.size();
            for(int i = 0;i<n;i++){
                TreeNode node = queue.poll();//删除每一次的第一个树节点
                if(node!=null){
                    res.add(node.val);
                }
                if(node.left!=null){
                    queue.add(node.left); //存左孩子指针
                }
                if(node.right!=null){
                    queue.add(node.right);//存右孩子指针
                }
            }
            result.add(res);//添加每一层的结果
        }
        return result;
    }
}