java - 明智地打印树级别
问题描述
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 函数..这是一个函数,它将植根于树并逐级打印...我的代码将所有内容打印在一行中..请提供任何建议.. 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--;
}
}
}
推荐阅读
- react-native - 知道是否在 youtube api 中添加了新视频
- javascript - 是否可以以编程方式将脚本文件加载到 Illustrator?
- c# - 如何从 C# 本机主机向 chrome 扩展发送事件
- javascript - Service Worker 中的动态缓存名称
- javascript - 如何使用 HtmlUnit 在无头模式下运行包含 Canvas 的 Html?
- reactjs - 如何在 Highcharts Reactjs 中将图例组合在一起
- vue.js - Vue - 组件内组件内的 v-model
- python - 我想爬网,但是有些项目被爬到了,有些项目没有爬到。我不知道原因
- angular - 为什么我需要 web-server 来加载 angular webapp
- authentication - 如何在启动 WSL Ubuntu 时提示用户输入用户名和密码