十万火急,人家给我出的面试题,求高手

xiaanming 2012-12-12 12:18:40
a
+---b
+----c
a
+---c
a
+---b
+----d
==排序结果==>
a
+---b
+----c
+----d
+---c
将上面的转换成下面的树装结构,上面的是没有排好序,现在要排序出来,怎么做
...全文
634 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
JPF1024 2012-12-15
  • 打赏
  • 举报
回复
引用 8 楼 wapigzhu 的回复:
Java code?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192pu……
支持一下
cs张 2012-12-15
  • 打赏
  • 举报
回复
学习学习!
这个用户很懒 2012-12-13
  • 打赏
  • 举报
回复
用Map,Map<String,Map<String,Map<String>>> put前看看是否有值
昕玫 2012-12-13
  • 打赏
  • 举报
回复
static class Node { private String name; private TreeSet<Node> nodeList; } 如果要使用集合装子节点的话,可以直接使用TreeSet在放入的时候自动排好序
wapigzhu 2012-12-12
  • 打赏
  • 举报
回复

public class Hierarchy {
	
	static class Node {
		private String name;
		private List<Node> nodeList;

		public Node(String name) {
			this.name = name;
			nodeList = new ArrayList<Node>();
		}

		public Node getSubNode(String name) {
			for (Node subNode : nodeList) {
				if (subNode.getName().equals(name))
					return subNode;
			}
			return null;
		}

		public String getName() {
			return name;
		}

		public void addSubNode(Node subNode) {
			nodeList.add(subNode);
		}
		
		public void print(){
			printNode(this, "+");
		}
		
		private void printNode(Node node, String prefix){
			System.out.println(prefix + node.getName());
			prefix += "---";
			for(Node subNode : node.nodeList){
				printNode(subNode, prefix);
			}
		}
	}
	
	private Node root;

	public Hierarchy() {
	}

	public void addNode(String path) {
		String[] nodeNames = path.split("\r\n");
		Node currentNode = null;
		for(String nodeName : nodeNames){
			currentNode = addNodeIfNotExist(nodeName, currentNode);
		}
	}
	
	public void print(){
		if(root != null)
			root.print();
		else
			System.out.println("empty");
	}
	
	public Node addNodeIfNotExist(String name, Node parent){
		if(parent == null){
			if(root == null){
				root = new Node(name);
				return root;
			}else if(root.getName().equals(name))
				return root;
			else
				throw new IllegalArgumentException("输入了一个不同的根节点");
			
		}else{
			Node targetNode = parent.getSubNode(name);
			if(targetNode == null){
				targetNode = new Node(name);
				parent.addSubNode(targetNode);
			}
			return targetNode;
		}
	}

	public static void main(String[] args) {
		String input = "a\r\n +---b\r\n  +----c\r\na\r\n +---c\r\na\r\n +---b\r\n  +----d";
		String[] paths = input.split("(?m)^(?=\\S)");
		Hierarchy hierarchy = new Hierarchy();
		for(String path : paths){
			if(path.length() > 0)
				hierarchy.addNode(path.replaceAll("([^a-z\r\n]*)", ""));
		}
		hierarchy.print();
	}

}
试试这个合你要求不,估计有bug,没怎么检查
xiaanming 2012-12-12
  • 打赏
  • 举报
回复
引用 6 楼 TUBER727 的回复:
这个和展示文件目录类似,你把a当成根目录,找它的child.可以参考一下 Java code ? 12345678910111213141516171819202122 import java.io.*; public class ListFiles{ public static void main(String[] args){ File ……
我能加你QQ吗?有问题要问
TUBER727 2012-12-12
  • 打赏
  • 举报
回复
这个和展示文件目录类似,你把a当成根目录,找它的child.可以参考一下

import java.io.*;
public class ListFiles{
	public static void main(String[] args){
		File f = new File("a");
		System.out.println(f.getName());
		tree(f,0);
 }
 private static void tree(File f,int level){
 	String preStr = "";
 	for(int i=0;i<=level;i++){
 		preStr += " +---"; 
 	}
 	File[] childs = f.listFiles();
 	for(int i=0;i<childs.length;i++){
 		System.out.println(preStr + childs[i].getName());
 		if(childs[i].isDirectory()){
 			tree(childs[i],level + 1);
 		}
 	}
 }
}
悲催的程序猿 2012-12-12
  • 打赏
  • 举报
回复
引用 4 楼 xiaanming 的回复:
引用 1 楼 yan19870429 的回复:顶一下。 引用 2 楼 scottxzj 的回复:不是 根据节点,找父节点,找重复,合并子节点就可以了么。 知道怎么做吗?
这个还真不知道。。
xiaanming 2012-12-12
  • 打赏
  • 举报
回复
引用 1 楼 yan19870429 的回复:
顶一下。
引用 2 楼 scottxzj 的回复:
不是 根据节点,找父节点,找重复,合并子节点就可以了么。
知道怎么做吗?
yongger520 2012-12-12
  • 打赏
  • 举报
回复
这个像家庭作业哦 需要定义一个树形数据结构
snow-is-my-Love 2012-12-12
  • 打赏
  • 举报
回复
不是 根据节点,找父节点,找重复,合并子节点就可以了么。
悲催的程序猿 2012-12-12
  • 打赏
  • 举报
回复
顶一下。
Inhibitory 2012-12-12
  • 打赏
  • 举报
回复
1. 按空格多少比较,如果空格一样多,再按字符串比较
zly361814478 2012-12-12
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/390313307 跟这个类似,差不多的思路
润物wu声 2012-12-12
  • 打赏
  • 举报
回复

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧