java - 明智地打印树级别

标签 java tree

 public class treeNodeUse {


        public static treeNode<Integer> takeInput(){
            int n;
            Scanner sc = new Scanner(System.in);
            System.out.println("enter data of node");
            treeNode<Integer> root = new treeNode<>(sc.nextInt());
            System.out.println("enter number of children ");
            int count = sc.nextInt();

            for (int i=0;i<count;i++){
                treeNode<Integer> children = takeInput();
    root.children.add(children);
            }
    return root;
        }
        public static treeNode<Integer> takeInputLevelwise(){
            Queue<treeNode<Integer>> q = new LinkedList<>();
            Scanner sc = new Scanner(System.in);
            System.out.println("enter value of root");
            treeNode<Integer> root = new treeNode<Integer>(sc.nextInt());
    q.add(root);
            while(!q.isEmpty()){
                treeNode<Integer> a = q.remove();
                System.out.println("enter no of children of " + a.data);
                int x = sc.nextInt();
                for(int i=0;i<x;i++){
                    System.out.println("enter " + (i+1)+"th "+"child of " +a.data );
                    treeNode<Integer> child = new treeNode<Integer>(sc.nextInt());
                    a.children.add(child);
                    q.add(child);

                }

            }
            return root;
        }

        public static void printLevelWise(treeNode<Integer> root){
            Queue<treeNode<Integer>> q = new LinkedList<>();
           q.add(root);
            System.out.println(root.data);
            while(!q.isEmpty()){
                treeNode<Integer> a = q.remove();
                if(a.children.size() > 0) System.out.println();
                for(int i=0;i<a.children.size();i++) {
                    q.add(a.children.get(i));
                    System.out.print(a.children.get(i).data + " ");

                }

            }

        }

        public static void print(treeNode<Integer> root){
    String s = root.data + ":";
    for(int i =0 ; i<root.children.size();i++){
        s = s+ root.children.get(i).data + "," ;
    }
    System.out.println(s);
    for(int i=0;i<root.children.size();i++)
    print(root.children.get(i));
        }


        public static void main(String[] args){

    printLevelWise(takeInputLevelwise());
        }



    }


     class treeNode<T> {
        T data;
        public ArrayList<treeNode> children;
        public treeNode(T data){
            this.data=data;
            children = new ArrayList<>();
        }

    }

检查 printLevelWise 函数..这是一个可以 Root 树并逐级打印的函数...我的代码在一行中打印所有内容..请提出任何建议.. https://i1.wp.com/algorithms.tutorialhorizon.com/files/2014/09/Level-Order-Traversal-Print-each-level-in-one-line.1.png这就是我想要的输出

最佳答案

您必须像下面的代码一样一次打印所有级别节点。希望这能解决您的问题。如果不明白任何部分,请告诉我。

public static void printLevelWise(treeNode<Integer> root) {
    Queue<treeNode<Integer>> q = new LinkedList<>();
    q.add(root);
    System.out.print(root.data);
    while (!q.isEmpty()) {
        int levelSize = q.size();

        if (levelSize > 0) System.out.println();
        while(levelSize > 0) {
            treeNode<Integer> a = q.remove();
            for (int i = 0; i < a.children.size(); i++) {
                q.add(a.children.get(i));
                System.out.print(a.children.get(i).data + " ");
            }
            levelSize--;
        }


    }
}

关于java - 明智地打印树级别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60629208/

相关文章:

java - optional ifPresent 调用对象方法

java - Tomcat6w.exe 与 javaw.exe - tomcat 实例

tree - 不构建二叉搜索树的高度

postgresql - 如何在使用递归选择后代的 Postgres 查询中打印深度级别?

javascript - javascript中的程序递归

java - 在 hbase 中,无法识别 dir hdfs ://test/apps/hbase/data/lib, 的 fs 忽略了 java.io.IOException

java - 共享串口(Modem协议(protocol)+拨号器)

java - Hibernate 连接两个表

python - 给定组件节点和运算符创建树

algorithm - 从中序和后序遍历构造二叉树