java多叉树遍历

而且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>();
 }
  
}

多叉树类:

Java代码
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;   
    }   
}  

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值