java 多叉树的遍历

[img]http://dl.iteye.com/upload/attachment/143356/ad82215c-4093-336c-9ecd-6eb5ff181fd1.jpg[/img]
接上一篇,昨天一朋友问我java中怎么实现多叉树的遍历,想了半天都没想出来,写了二叉的遍历之后,发现多叉也一样的,而且java提供的容器类很方便,比c语言里处理指针方便多了。
我手工构造了一颗多叉树。然后再递归遍历。类似于中序遍历吧。
树的节点类:

package TestTwo;

import java.util.ArrayList;
import java.util.List;

//多叉树的节点
public class ManyTreeNode {

//节点的内容
private NodeBean data ;
//节点列表
private List childList;

//构造函数
public ManyTreeNode(){
data = new NodeBean();
childList = new ArrayList();
}

//构造函数 可以指定key的值
public ManyTreeNode(int key){
data = new NodeBean();
data.setKey(key);
childList = new ArrayList();
}

}

多叉树类:

package TestTwo;

//多叉树
public class ManyNodeTree {

//树根
private ManyTreeNode root;

//构造函数
public ManyNodeTree(){
root = new ManyTreeNode();
root.getData().setNodeName("root");
}

//构造函数
public ManyNodeTree(int key){
root = new ManyTreeNode();
root.getData().setKey(key);
root.getData().setNodeName("root");
}


//遍历多叉树
public String iteratorTree(ManyTreeNode treeNode){

StringBuilder sb = new StringBuilder();

if (treeNode != null) {

if ("root".equals(treeNode.getData().getNodeName())) {
sb.append(treeNode.getData().getKey() + ",");
}

for (ManyTreeNode index : treeNode.getChildList()) {

sb.append(index.getData().getKey() + ",");

if (index.getChildList() != null && index.getChildList().size() > 0 ) {

sb.append(iteratorTree(index));

}
}
}

return sb.toString();
}


//构造多叉树
public static ManyNodeTree createTree(){

//用构造函数指定根节点的值
ManyNodeTree tree = new ManyNodeTree(60);

//第一层的节点
ManyTreeNode node1 = new ManyTreeNode(40);
ManyTreeNode node2 = new ManyTreeNode(50);
ManyTreeNode node3 = new ManyTreeNode(30);

tree.getRoot().getChildList().add(0, node1);
tree.getRoot().getChildList().add(1, node2);
tree.getRoot().getChildList().add(2, node3);

//第二层的节点
ManyTreeNode node21 = new ManyTreeNode(85);
ManyTreeNode node22 = new ManyTreeNode(70);
ManyTreeNode node23 = new ManyTreeNode(15);
ManyTreeNode node24 = new ManyTreeNode(102);
ManyTreeNode node25 = new ManyTreeNode(83);
ManyTreeNode node26 = new ManyTreeNode(9);

tree.getRoot().getChildList().get(0).getChildList().add(0,node21);
tree.getRoot().getChildList().get(0).getChildList().add(1,node22);
tree.getRoot().getChildList().get(0).getChildList().add(2,node23);

tree.getRoot().getChildList().get(1).getChildList().add(0,node24);
tree.getRoot().getChildList().get(1).getChildList().add(1,node25);

tree.getRoot().getChildList().get(2).getChildList().add(0,node26);

//第二层的节点
ManyTreeNode node31 = new ManyTreeNode(15);
ManyTreeNode node32 = new ManyTreeNode(20);
ManyTreeNode node33 = new ManyTreeNode(100);
ManyTreeNode node44 = new ManyTreeNode(60);

tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(0,node31);
tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(1,node32);
tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(2,node33);

tree.getRoot().getChildList().get(0).getChildList().get(2).getChildList().add(0,node44);

return tree;

}

/**
* @param args
*/
public static void main(String[] args) {
ManyNodeTree testTree = ManyNodeTree.createTree();
String result = testTree.iteratorTree(testTree.getRoot());
System.out.println(result);
}

}

NodeBean类

public class NodeBean {

private int key;
private String nodeName;

public String getNodeName() {
return nodeName;
}

public void setNodeName(String nodeName) {
this.nodeName = nodeName;
}

public int getKey() {
return key;
}

public void setKey(int key) {
this.key = key;
}
}

省略了get,set方法。
图传上去不怎么清楚。
遍历的结果:60,40,85,15,20,100,70,15,60,50,102,83,30,9,

你可能感兴趣的:(java)