生成二叉排序树并先序遍历、中序遍历、后序遍历

原创 2015年07月08日 11:12:48

1、新建BinaryTree.java文件定义二叉树结构:

public class BinaryTree {
	private int data;
	private BinaryTree left;
	private BinaryTree right;
	public BinaryTree(int data){
		this.data = data;
		this.left = null;
		this.right = null;
	}
	public int getData() {
		return data;
	}
	public void setData(int data) {
		this.data = data;
	}
	public BinaryTree getLeft() {
		return left;
	}
	public void setLeft(BinaryTree left) {
		this.left = left;
	}
	public BinaryTree getRight() {
		return right;
	}
	public void setRight(BinaryTree right) {
		this.right = right;
	}
	
}

2、新建操作类BinaryTreePreorder.java,插入方法:

public static void insert(BinaryTree root, int data){
		if(data > root.getData()){
			if(root.getRight() == null){
				root.setRight(new BinaryTree(data));
			}else{
				insert(root.getRight(), data);
			}
		}else{
			if(root.getLeft() == null){
				root.setLeft(new BinaryTree(data));
			}else{
				insert(root.getLeft(), data);
			}
		}
	}

3、遍历方法:

/**
	 * 先序遍历
	 * @param root
	 */
	public static void preOrder(BinaryTree root){
		if(root == null){
			return;
		}
		//遍历出数据
		System.out.print(root.getData() + "-");
		if(root.getLeft() != null){
			preOrder(root.getLeft());
		}
		if(root.getRight() != null){
			preOrder(root.getRight());
		}
	}
	
	/**
	 * 中序遍历
	 * @param root
	 */
	public static void inOrder(BinaryTree root){
		if(root == null){
			return;
		}
		if(root.getLeft() != null){
			preOrder(root.getLeft());
		}
		//遍历出数据
		System.out.print(root.getData() + "-");
		if(root.getRight() != null){
			preOrder(root.getRight());
		}
	}
	
	/**
	 * 后序遍历
	 * @param root
	 */
	public static void suffixOrder(BinaryTree root){
		if(root == null){
			return;
		}
		if(root.getLeft() != null){
			preOrder(root.getLeft());
		}
		if(root.getRight() != null){
			preOrder(root.getRight());
		}
		//遍历出数据
		System.out.print(root.getData() + "-");
	}

4、测试

public static void main(String[] str) {
		int[] array = { 36, 10, 35, 66, 16, 18, 90, 76, 9, 20 };
		BinaryTree root = new BinaryTree(array[0]); // 创建二叉树
		for (int i = 1; i < array.length; i++) {
			insert(root, array[i]); // 向二叉树中插入数据
		}
		System.out.println("先根遍历:");
		preOrder(root);
		System.out.println();
		System.out.println("中根遍历:");
		inOrder(root);
		System.out.println();
		System.out.println("后根遍历:");
		suffixOrder(root);
	}

测试结果:

先根遍历:
36-10-9-35-16-18-20-66-90-76-
中根遍历:
10-9-35-16-18-20-36-66-90-76-
后根遍历:
10-9-35-16-18-20-66-90-76-36-


版权声明:本文为博主原创文章,未经博主允许不得转载。

二叉树前序,中序,后序遍历详解

只要是搞计算机的,对数据结构中二叉树遍历都不陌生,但是如果用到的机会不多那么就会慢慢淡忘,温故而之新才是最好的学习方式,现在就重新温习一下这方面的知识。 首先我想先改变这几个遍历的名字(前根序遍历,...
  • prince_jun
  • prince_jun
  • 2012年07月09日 15:28
  • 56371

二叉树的遍历代码(先序遍历,中序遍历,后序遍历)

二叉树遍历主要有三种,分为前序遍历,中序遍历,后序遍历。 先序遍历: (1)先访问跟节点 (2)再先序访问左子树(递归) (3)再先序访问右子树(递归)中序遍历: (1)中序遍历左子树 ...
  • u013326239
  • u013326239
  • 2016年11月26日 16:40
  • 499

树的先序、中序和后序遍历方式

前序遍历 前序遍历(DLR) 前序遍历也叫做先根遍历、先序遍历,可记做根左右。 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树...
  • eric_zl_zhang
  • eric_zl_zhang
  • 2012年06月13日 16:56
  • 85939

二叉树系列(1)已知二叉树的中序遍历和前序遍历,如何求后序遍历

(昨晚HULU的笔试题之一,被鄙视的惨,面对向往已久的公司,交出苍白无力的答卷,心里像被剜了一刀。再多解释都是苍白。我鄙视我自己。现在开始舔舐伤口。) 假设有棵树,长下面这个样子,它的前序遍历,中...
  • feliciafay
  • feliciafay
  • 2011年09月24日 11:04
  • 61793

二叉树遍历(前序、中序、后序、层次遍历、深度优先、广度优先)

二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有深度遍历和广度遍历,深度遍历有前序、中序以及后序三种遍历方法,广度遍历即我们平常所说的层次遍历。因为树的定...
  • My_Jobs
  • My_Jobs
  • 2015年02月03日 16:10
  • 15892

算法:二叉树的先序遍历、中序遍历、后序遍历(递归及非递归方式)的java代码实现

首先来看一棵二叉树: 1、前序遍历: 前序遍历首先访问根结点然后遍历左子树,最后遍历右子树。在遍历左、右子树时,仍然先访问根结点,然后遍历左子树,最后遍历右子树...
  • jssongwei
  • jssongwei
  • 2016年03月03日 17:33
  • 6951

二叉树前序、中序、后序遍历非递归写法的透彻解析

前言 在前两篇文章二叉树和二叉搜索树中已经涉及到了二叉树的三种遍历。递归写法,只要理解思想,几行代码。可是非递归写法却很不容易。这里特地总结下,透彻解析它们的非递归写法。其中,中序遍历的非递归写法最...
  • zhangxiangDavaid
  • zhangxiangDavaid
  • 2014年07月06日 22:14
  • 65110

根据后序和中序遍历输出先序遍历

think: 1自己或许应该转变思想,自己一直将树的部分当做一种结构来记忆使用,但基本经常出现错误,或许树的知识点也应该作为一种解决问题的思想来理解,而不是一再的死记硬背模板,要学会灵活的变通和变化...
  • BlessingXRY
  • BlessingXRY
  • 2017年03月07日 22:12
  • 1005

二叉树前序、中序、后序遍历的相互求法

二叉树前序、中序、后序遍历的相互求法       二叉树是数据结构中常被问到的相关知识点,也是我们需要了解的一个知识点,那今天来总结一下二叉树的前序、中序、后序遍历的相互求法,即如果知道两个...
  • u014536527
  • u014536527
  • 2016年03月30日 02:45
  • 5753

根据输入的数据,建立二叉排序树,并求先、中、后序遍历

#include #include #define MAX 1000 typedef struct node{ int d; struct node *lchild,*rchild; }T...
  • longvs
  • longvs
  • 2013年08月25日 23:02
  • 2709
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:生成二叉排序树并先序遍历、中序遍历、后序遍历
举报原因:
原因补充:

(最多只允许输入30个字)