JAVA版二叉树的先序、中序、后序和层次遍历

package com.Algorithm.Tree;
import java.util.*;
/*
 * author:Tammy Pi
 * function:二叉树
 */
public class BinaryTree {

	private Scanner scanner=null;
	private TreeNode treenode=null;
	private Queue queue=null;
	
	public TreeNode getTreenode() {
		return treenode;
	}
	public void setTreenode(TreeNode treenode) {
		this.treenode = treenode;
	}
	public Scanner getScanner() {
		return scanner;
	}
	public void setScanner(Scanner scanner) {
		this.scanner = scanner;
	}
	public BinaryTree()
	{
		scanner=new Scanner(System.in);
		this.queue=new Queue();
	}
	public void createTree()
	{
		this.treenode=createTree(treenode);
	}
	public void preTraverse()
	{
		preTraverse(this.treenode);
	}
	public void midTraverse()
	{
		midTraverse(this.treenode);
	}
	public void postTraverse()
	{
		postTraverse(this.treenode);
	}
	public void levelTraverse()
	{
		levelTraverse(this.treenode);
	}
	public TreeNode createTree(TreeNode root)
	{
		String data=scanner.next();
		if(data.equals("/"))
		{
			root=null;
			return null;
		}
		root=new TreeNode(data);
		root.setLchild(createTree(root.getLchild()));
		root.setRchild(createTree(root.getRchild()));
		return root;
	}
	//先序遍历
	public void preTraverse(TreeNode root)
	{
		if(root!=null)
		{
			System.out.print(root.getData()+" ");
			preTraverse(root.getLchild());
			preTraverse(root.getRchild());
		}
	}
	//中序遍历
	public void midTraverse(TreeNode root)
	{
		if(root!=null)
		{
			midTraverse(root.getLchild());
			System.out.print(root.getData()+" ");
			midTraverse(root.getRchild());
		}
	}
	//后序遍历
	public void postTraverse(TreeNode root)
	{
		if(root!=null)
		{
			postTraverse(root.getLchild());
			postTraverse(root.getRchild());
			System.out.print(root.getData()+" ");
		}
	}
	//层次遍历
	public void levelTraverse(TreeNode root)
	{
		System.out.print(root.getData()+" ");
		queue.enQueue(root);
		int level=1;
		while(!queue.isEmpty())
		{
		    List<TreeNode> list=new ArrayList<TreeNode>();
		    while(!queue.isEmpty())
		    {
		    	list.add(queue.deQueue());
		    }
		    boolean tag=false;
		    for(int i=0;i<list.size();i++)
		    {
		       if(list.get(i).getLchild()!=null)
		       {
		    	System.out.print(list.get(i).getLchild().getData()+" ");
		    	queue.enQueue(list.get(i).getLchild());
		    	tag=true;
		       }
		       if(list.get(i).getRchild()!=null)
		       {
		    	System.out.print(list.get(i).getRchild().getData()+" ");
		    	queue.enQueue(list.get(i).getRchild());
		    	tag=true;
		       }
		    }
		    if(tag)
		    {
		    	level++;
		    }
		}
		System.out.println("二叉树共"+level+"层");
	}
	public static void main(String[] args)
	{
		BinaryTree tree=new BinaryTree();
		tree.createTree();
		System.out.println("二叉树建立完成");
		System.out.print("先序遍历结果为:");
		tree.preTraverse();
		System.out.println();
		System.out.print("中序遍历结果为:");
		tree.midTraverse();
		System.out.println();
		System.out.print("后序遍历结果为:");
		tree.postTraverse();
		System.out.println();
		System.out.print("层次遍历结果为:");
		tree.levelTraverse();
		System.out.println();
	}
}

运行结果如下所示:

0 1 2 / / 3 / / 4 / /
二叉树建立完成
先序遍历结果为:0 1 2 3 4
中序遍历结果为:2 1 3 0 4
后序遍历结果为:2 3 1 4 0
层次遍历结果为:0 1 4 2 3 二叉树共3层

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值