• 剑指offer:二叉树打印成多行(层次遍历)


    1. 题目描述

    从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

    2. 思路

    层次遍历

    3. 递归

    public class Solution {
        ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            ArrayList<ArrayList<Integer>> list = new ArrayList<>();
            depth(pRoot, 1, list);
            return list;
        }
         
        private void depth(TreeNode root, int depth, ArrayList<ArrayList<Integer>> list) {
            if(root == null) return;
            if(depth > list.size())
                list.add(new ArrayList<Integer>());
            list.get(depth -1).add(root.val);
             
            depth(root.left, depth + 1, list);
            depth(root.right, depth + 1, list);
        }
    }

    4. 非递归

    import java.util.*;
    
    public class Solution {
        static ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
            return levelorder(pRoot);
        }
    
        public static ArrayList<ArrayList<Integer>> levelorder(TreeNode root) {
            Queue<TreeNode> queue = new LinkedList<>();
            ArrayList<ArrayList<Integer>> result = new ArrayList<>();
            if(root == null) return result;
            queue.offer(root); // 首先将根节点root入队
            while (!queue.isEmpty()) {// Queue不为空则循环
                ArrayList<Integer> node = new ArrayList<>();// 保存每一层节点的值
                int length = queue.size();// 每一层的节点数目
                while (length > 0) {
                    TreeNode tree = queue.poll();
                    if (tree.left != null) {
                        queue.offer(tree.left);
                    }
                    if (tree.right != null) {
                        queue.offer(tree.right);
                    }
                    node.add(tree.val);
                    length--;
                }
                // 循环结束后,得到的Queue为下一层做准备,node为本层遍历结果
                result.add(node);
            }
            return result;
        }
    }
  • 相关阅读:
    疯狂Java讲义-Java基础类库
    第十一届软件类校内模拟赛本科组Java软件开发
    疯狂Java讲义
    疯狂Java讲义-面向对象(下)
    疯狂Java讲义-面向对象(上)
    疯狂Java讲义-流程控制与数组
    疯狂Java讲义-数据类型和运算符
    数据结构-图和图遍历(DFS、BFS)
    A1034 Head of a Gang (30分)
    A1098 Insertion or Heap Sort (25分)
  • 原文地址:https://www.cnblogs.com/haimishasha/p/11520955.html
Copyright © 2020-2023  润新知