给你一个二叉树,请你返回其按 层序遍历 得到的节点值。 (即逐层地,从左到右访问所有节点)。
示例:
二叉树:[3,9,20,null,null,15,7],

      3
     / \
    9  20
      /  \
     15   7
  返回其层序遍历结果:

  [
    [3],
    [9,20],
    [15,7]
  ]

思路:该题可有BFS和DFS来实现
思路一、BFS:BFS一般和队列queue一起实现
初始化:
List<List> result = new ArrayList<>();
Queue queue = new LinkedList<>();
操作:
queue.isEmpty():判断队列是否为空
queue.poll():返回队列顶元素并删除
代码实现:

    //size:用来记录每一层中的元素剩余个数
    层序遍历,每当遍历该层节点的时候,将该节点以及其孩子节点都压入队列。
    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> result = new ArrayList<>();
        if(root == null)
        {
            return result;
        }
        Queue<TreeNode> queue  = new LinkedList<>();
        queue.add(root);
        while(!queue.isEmpty())
        {
            int size = queue.size();
            List<Integer> list = new ArrayList<>();
            while(size > 0)
            {
                TreeNode node = queue.poll();
                list.add(node.val);
                if(node.left!=null)
                {
                    queue.add(node.left);
                }
                if(node.right != null)
                {
                    queue.add(node.right);
                }
                size = size - 1;

            }
            result.add(list.copy());
        }
        return result;

思路二、DFS:DFS一般用递归实现
代码实现:

 public List<List<Integer>> levelOrder(TreeNode root) {
       List<List<Integer>> result = new ArrayList<>();
        if(root == null)
        {
            return result;
        }
        dfs(root,result,0);
        return result;
    }
    public void dfs(TreeNode root,List<List<Integer>> result,int level)
    {
        if(root == null)
        {
            return;         //如果节点为空,则返回
        }
        if(level > result.size() - 1)
        {
            result.add(new ArrayList<Integer>());//如果当前result没有对应层级的相应索引,则添加
        }
        result.get(level).add(root.val);//将对应层级元素的值添加到对应索引中
        if(root.left != null)
        {
            dfs(root.left,result,level++);//开始向下递归
        }
        if(root.right != null)
        {
            dfs(root.right,result,level++);//开始向下递归
        }
    }
posted on 2021-02-03 14:05  东宁王孟川  阅读(144)  评论(0)    收藏  举报