自己写的Java 数据结构Tree

发现Java没有Tree,自己简单写了一个。

可通过new创建一个Tree,然后获取root Node节点。每个Node节点有自己的Data,并可以获取当前Node的level,parent Node和child Node list。可以在Node上添加,查找和删除child Node。

具体代码如下:

Tree.java

import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * Project:JavaTest * FileName:Tree.java * @Description: TODO * @author:ligh4 * @versionV1.0 * Createdate: 2015年3月23日 下午3:12:50 * Copyright: Copyright(C) 2014-2015 * CompanyLenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 类 Tree 的实现描述:TODO 类实现描述 * * @author ligh4 2015年3月23日下午3:12:50 */public class Tree<T extends Object> {class Node {private Tdata;private List<Node> childs;private Nodeparent;private intlevel;private Node(T data, Node parent) {this.data = data;this.parent = parent;if (parent == null) {level = 0;} else {level = parent.level + 1;}}public List<Node> getchilds() {return childs;}public void addChild(T data) {if (childs == null) {childs = new ArrayList<Node>();}childs.add(new Node(data, this));}public void deleteChild(Node node) {if (childs != null) {Iterator<Node> it = childs.iterator();while (it.hasNext()) {Node child = it.next();if (child.equals(node)) {childs.remove(child);break;}}}}public Node getChild(T data) {if (childs != null) {Iterator<Node> it = childs.iterator();while (it.hasNext()) {Node child = it.next();if (child.data.equals(data)) {return child;}}}return null;}public Node getParent() {return parent;}public void setData(T data) {this.data = data;}public T getData() {return data;}public int getLevel() {return level;}}private Node root = new Node(null, null);public Node getRoot() {return root;}}

测试:

import java.util.List;/** * Project:JavaTest * FileName:TestTree.java * @Description: TODO * @author:ligh4 * @versionV1.0 * Createdate: 2015年3月23日 下午3:05:10 * Copyright: Copyright(C) 2014-2015 * CompanyLenovo LTD. * All rights Reserved, Designed By Lenovo CIC. *//** * 类 TestTree 的实现描述:TODO 类实现描述 * * @author ligh4 2015年3月23日下午3:05:10 */public class TestTree {public static void main(String[] args) {Tree<Integer> idTree = new Tree<Integer>();Tree.Node root = idTree.getRoot();root.setData(1);root.addChild(2);root.addChild(3);Tree.Node child2 = root.getChild(2);child2.addChild(4);//中序System.out.println("中序:");printTree(root);//先序System.out.println("先序");printTree2(root);}public static void printTree(Tree.Node node) {List<Tree.Node> childs = node.getchilds();Tree.Node parent = node.getParent();String msg = String.format("level:%d node:%s parent:%s childs:%d", node.getLevel(), node.getData().toString(), parent == null ? "null" : parent.getData().toString(),childs == null ? 0 : childs.size());System.out.println(msg);if (childs != null) {for (Tree.Node n : childs) {printTree(n);}}}public static void printTree2(Tree.Node node) {List<Tree.Node> childs = node.getchilds();Tree.Node parent = node.getParent();if (parent == null) {String msg = String.format("level:%d node:%s parent:%s childs:%d", node.getLevel(),node.getData().toString(), parent == null ? "null" : parent.getData().toString(), childs == null ? 0 : childs.size());System.out.println(msg);}if (childs != null) {for (Tree.Node n : childs) {List<Tree.Node> childs2 = n.getchilds();Tree.Node parent2 = n.getParent();String msg = String.format("level:%d node:%s parent:%s childs:%d", n.getLevel(), n.getData().toString(), parent2 == null ? "null" : parent2.getData().toString(), childs2 == null ? 0 : childs2.size());System.out.println(msg);}for (Tree.Node n : childs) {printTree2(n);}}}}测试结果:

中序:level:0 node:1 parent:null childs:2level:1 node:2 parent:1 childs:1level:2 node:4 parent:2 childs:0level:1 node:3 parent:1 childs:0先序level:0 node:1 parent:null childs:2level:1 node:2 parent:1 childs:1level:1 node:3 parent:1 childs:0level:2 node:4 parent:2 childs:0

,见过旅行风景,就这样,慢慢学会了长大。

自己写的Java 数据结构Tree

相关文章:

你感兴趣的文章:

标签云: