java 多叉树遍历

java 多叉树的遍历

 
写了二叉的遍历之后,发现多叉也一样的,而且java提供的容器类很方便,手工构造了一颗多叉树。然后再递归遍历。类似于中序遍历吧。
树的节点类:
Java代码 复制代码
  1. package TestTwo;   
  2.   
  3. import java.util.ArrayList;   
  4. import java.util.List;   
  5.   
  6. //多叉树的节点   
  7. public class ManyTreeNode {   
  8.        
  9.     //节点的内容   
  10.     private NodeBean  data ;   
  11.     //节点列表   
  12.     private List<ManyTreeNode> childList;   
  13.        
  14.     //构造函数   
  15.     public ManyTreeNode(){   
  16.         data = new NodeBean();   
  17.         childList = new ArrayList<ManyTreeNode>();   
  18.     }   
  19.        
  20.     //构造函数 可以指定key的值   
  21.     public ManyTreeNode(int key){   
  22.         data = new NodeBean();   
  23.         data.setKey(key);   
  24.         childList = new ArrayList<ManyTreeNode>();   
  25.     }   
  26.            
  27. }  
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代码 复制代码
  1. package TestTwo;   
  2.   
  3. //多叉树   
  4. public class ManyNodeTree {   
  5.        
  6.     //树根   
  7.     private ManyTreeNode root;   
  8.        
  9.     //构造函数   
  10.     public ManyNodeTree(){   
  11.         root = new ManyTreeNode();   
  12.         root.getData().setNodeName("root");   
  13.     }   
  14.        
  15.     //构造函数   
  16.     public ManyNodeTree(int key){   
  17.         root = new ManyTreeNode();   
  18.         root.getData().setKey(key);   
  19.         root.getData().setNodeName("root");   
  20.     }   
  21.        
  22.        
  23.     //遍历多叉树   
  24.     public String iteratorTree(ManyTreeNode treeNode){   
  25.            
  26.         StringBuilder sb = new StringBuilder();   
  27.            
  28.         if (treeNode != null) {   
  29.                
  30.             if ("root".equals(treeNode.getData().getNodeName())) {   
  31.                 sb.append(treeNode.getData().getKey() + ",");   
  32.             }   
  33.                
  34.             for (ManyTreeNode index : treeNode.getChildList()) {   
  35.                    
  36.                 sb.append(index.getData().getKey() + ",");   
  37.                    
  38.                 if (index.getChildList() != null && index.getChildList().size() > 0 ) {   
  39.                        
  40.                     sb.append(iteratorTree(index));   
  41.                        
  42.                 }   
  43.             }   
  44.         }   
  45.            
  46.         return sb.toString();   
  47.     }   
  48.        
  49.        
  50.     //构造多叉树   
  51.     public static ManyNodeTree createTree(){   
  52.            
  53.         //用构造函数指定根节点的值   
  54.         ManyNodeTree tree = new ManyNodeTree(60);   
  55.            
  56.         //第一层的节点   
  57.         ManyTreeNode node1 = new ManyTreeNode(40);   
  58.         ManyTreeNode node2 = new ManyTreeNode(50);   
  59.         ManyTreeNode node3 = new ManyTreeNode(30);   
  60.            
  61.         tree.getRoot().getChildList().add(0, node1);   
  62.         tree.getRoot().getChildList().add(1, node2);   
  63.         tree.getRoot().getChildList().add(2, node3);   
  64.            
  65.         //第二层的节点   
  66.         ManyTreeNode node21 = new ManyTreeNode(85);   
  67.         ManyTreeNode node22 = new ManyTreeNode(70);   
  68.         ManyTreeNode node23 = new ManyTreeNode(15);   
  69.         ManyTreeNode node24 = new ManyTreeNode(102);   
  70.         ManyTreeNode node25 = new ManyTreeNode(83);   
  71.         ManyTreeNode node26 = new ManyTreeNode(9);   
  72.            
  73.         tree.getRoot().getChildList().get(0).getChildList().add(0,node21);   
  74.         tree.getRoot().getChildList().get(0).getChildList().add(1,node22);   
  75.         tree.getRoot().getChildList().get(0).getChildList().add(2,node23);   
  76.            
  77.         tree.getRoot().getChildList().get(1).getChildList().add(0,node24);   
  78.         tree.getRoot().getChildList().get(1).getChildList().add(1,node25);   
  79.            
  80.         tree.getRoot().getChildList().get(2).getChildList().add(0,node26);   
  81.            
  82.         //第二层的节点   
  83.         ManyTreeNode node31 = new ManyTreeNode(15);   
  84.         ManyTreeNode node32 = new ManyTreeNode(20);   
  85.         ManyTreeNode node33 = new ManyTreeNode(100);   
  86.         ManyTreeNode node44 = new ManyTreeNode(60);   
  87.            
  88.         tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(0,node31);   
  89.         tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(1,node32);   
  90.         tree.getRoot().getChildList().get(0).getChildList().get(0).getChildList().add(2,node33);   
  91.            
  92.         tree.getRoot().getChildList().get(0).getChildList().get(2).getChildList().add(0,node44);   
  93.            
  94.         return tree;   
  95.            
  96.     }   
  97.   
  98.     /**  
  99.      * @param args  
  100.      */  
  101.     public static void main(String[] args) {   
  102.         ManyNodeTree testTree = ManyNodeTree.createTree();   
  103.         String result = testTree.iteratorTree(testTree.getRoot());   
  104.         System.out.println(result);   
  105.     }   
  106.   
  107. }   
  108.   
  109. NodeBean类   
  110.   
  111. public class NodeBean {   
  112.        
  113.     private int key;   
  114.     private String nodeName;   
  115.   
  116.     public String getNodeName() {   
  117.         return nodeName;   
  118.     }   
  119.   
  120.     public void setNodeName(String nodeName) {   
  121.         this.nodeName = nodeName;   
  122.     }   
  123.   
  124.     public int getKey() {   
  125.         return key;   
  126.     }   
  127.   
  128.     public void setKey(int key) {   
  129.         this.key = key;   
  130.     }   
  131. }  
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值