java 实现树,并实现树的前序,中序,和后序的遍历

/**
创建一棵树*/
public class MyTree {
	
	int data;//节点数据
	MyTree left;//左子树
	MyTree right;//右子树
	
	/**
	 * 构建一个节点*/
	public MyTree(int data){
		
		this.data=data;
		left=null;
		right=null;
	}
	
	/**
	 * 规则:二叉树的左节点比根结点的值小
	 *         右节点比二叉树的根节点值大*/
	
	/**
	 * 添加节点,构建二叉树(采用递归的算法构建)
	 * @param data 需要插入的节点数据1*/
	public void insertNode(MyTree root, int data){
		if(data>root.data){//插入的数据大于根节点的值
			if(root.right==null){
				root.right=new MyTree(data);
			}else {
				insertNode(root.right, data);//递归:继续往下判断
			}
		}else {//插入的数据小于根节点的值
			if(root.left==null){
				root.left=new MyTree(data);
			}else {
				insertNode(root.left, data);//递归:继续往下判断
			}
		}
	}

}


 

/**
 * 排序*/
public class TreeOrder {
	
	/*(1)前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。简记根-左-右。


	(2)中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。简记左-根-右。


	(3)后序遍历(LRD),首先遍历左子树,然后遍历右子树,最后访问根结点。简记左-右-根。*/


	public static void preOrder(MyTree root) { // 先根遍历
		if (root != null) {
			System.out.print(root.data + "-");
			preOrder(root.left);
			preOrder(root.right);
		}
	}


	public static void inOrder(MyTree root) { // 中根遍历


		if (root != null) {
			inOrder(root.left);
			System.out.print(root.data + "--");
			inOrder(root.right);
		}
	}


	public static void postOrder(MyTree root) { // 后根遍历


		if (root != null) {
			postOrder(root.left);
			postOrder(root.right);
			System.out.print(root.data + "---");
		}


	}
}

/**
 * main函数*/
public class TreeDemo {
	public static void main(String[] args) {
		
		int[] array = {12,76,35,22,16,48,90,46,9,40};
		  MyTree root = new MyTree(array[0]);   //创建二叉树
		  for(int i=1;i<array.length;i++){
		   root.insertNode(root, array[i]);       //向二叉树中插入数据
		  }
		  System.out.println("先根遍历:");
		  TreeOrder.preOrder(root);
		  System.out.println();
		  System.out.println("中根遍历:");
		  TreeOrder.inOrder(root);
		  System.out.println();
		  System.out.println("后根遍历:");
		  TreeOrder.postOrder(root);
	}


}
/*先根遍历结果:
12-9-76-35-22-16-48-46-40-90-
中根遍历:
9--12--16--22--35--40--46--48--76--90--
后根遍历:
9---16---22---40---46---48---35---90---76---12---*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值