• 网易:层次遍历二叉树


    题目描述

    分层遍历二叉树
    用java实现树结构,分层遍历二叉树。给定一棵二叉树,要求按分层遍历该二叉树,即从上到下按层次访问该二叉树(每一层单独输出一行),每一层要求访问的顺序为从左到右,再按照相同规则从下至上遍历一遍,树节点定义如下
    class Node {
    int data;
    Node left;
    Node right;
    }
    输入描述
    图:
            __1__
           /     
        __2__     3__
       /            
      4     __5__     6
           7     8
    上面的输入为:1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8注:0代表这个位置没有数字,数据长度不超过1024。
    输出描述
    按照层级正向和反向输出二叉树,注意输出行末没有空格
    示例1
    输入
    1, 2, 3, 4, 5, 0, 6, 0, 0, 7, 8
    输出
    1
    2 3
    4 5 6
    7 8
    
    7 8
    4 5 6
    2 3
    1

    代码

    import java.util.ArrayList;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.Queue;
    import java.util.Scanner;
    class Node{
        int val;
        Node left;
        Node right;
        public Node(int val){
            this.val = val;
        }
    }
    public class A1 {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            String[] str = sc.nextLine().split(",");
            int len = str.length;
            int[] data = new int[len];
            for(int i=0; i<len; i++){
                data[i] = Integer.valueOf(str[i]);
            }
            Node root = creat(data);
            List<List<Integer>> result = levelorder(root);
            for (int i = 0; i < result.size(); i++) {
                for (int j = 0; j < result.get(i).size(); j++) {
                    System.out.print(result.get(i).get(j) + " ");
                }
                System.out.println();
            }
            System.out.println();
            for (int i = result.size()-1; i >= 0; i--) {
                for (int j = 0; j < result.get(i).size(); j++) {
                    System.out.print(result.get(i).get(j) + " ");
                }
                System.out.println();
            }
        }
        public static Node creat(int[] objs){
            ArrayList<Node> datas =new ArrayList<Node>();
            //        将一个数组的值依次转换为Node节点
            for(int o:objs){
                datas.add(new Node(o));
            }
            //第一个数为根节点
            Node root=datas.get(0);
            //建立二叉树
            for (int i = 0; i <objs.length/2; i++) {
                //左孩子
                if(datas.get(i*2+1).val!=0){
                    datas.get(i).left=datas.get(i*2+1);
                }
                //右孩子
                if((i*2+2)<datas.size() && datas.get(i*2+2).val!=0){//避免偶数的时候 下标越界
                    datas.get(i).right=datas.get(i*2+2);
                }
            }
            return root;
        }
        
        public static List<List<Integer>> levelorder(Node Node) {
            Queue<Node> queue = new LinkedList<>();
            List<List<Integer>> result = new ArrayList<>();
         if(Node == null) return result; queue.offer(Node);
    // 首先将根节点root入队 while (!queue.isEmpty()) {// Queue不为空则循环 List<Integer> node = new ArrayList<>();// 保存每一层节点的值 int length = queue.size();// 每一层的节点数目 while (length > 0) { Node 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; } }
  • 相关阅读:
    简单自定义控件在view下可以运行在传统模式下运行显示空白
    symbian菜单2运行时更换菜单实现右键菜单功能
    得到文件路径信息 TParse
    Symbian菜单:创建一个最简单的菜单
    RFs 目录操作
    作品[RFileRead/WriteStream 练习] for s60 fp2
    对话框的练习
    文件浏览工具s60第二版
    转描述符
    得到驱动器信息
  • 原文地址:https://www.cnblogs.com/haimishasha/p/11370583.html
Copyright © 2020-2023  润新知