java 多叉树的遍历
写了二叉的遍历之后,发现多叉也一样的,而且java提供的容器类很方便,手工构造了一颗多叉树。然后再递归遍历。类似于中序遍历吧。
树的节点类:
- package TestTwo;
- import java.util.ArrayList;
- import java.util.List;
- //多叉树的节点
- public class ManyTreeNode {
- //节点的内容
- private NodeBean data ;
- //节点列表
- private List<ManyTreeNode> childList;
- //构造函数
- public ManyTreeNode(){
- data = new NodeBean();
- childList = new ArrayList<ManyTreeNode>();
- }
- //构造函数 可以指定key的值
- public ManyTreeNode(int key){
- data = new NodeBean();
- data.setKey(key);
- childList = new ArrayList<ManyTreeNode>();
- }
- }
package TestTwo;
import java.util.ArrayList;
import java.util.List;
//多叉树的节点
public class ManyTreeNode {
//节点的内容
private NodeBean data ;
//节点列表
private List<ManyTreeNode> childList;
//构造函数
public ManyTreeNode(){
data = new NodeBean();
childList = new ArrayList<ManyTreeNode>();
}
//构造函数 可以指定key的值
public ManyTreeNode(int key){
data = new NodeBean();
data.setKey(key);
childList = new ArrayList<ManyTreeNode>();
}
}
多叉树类:
- 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;
- }
- }