二叉排序树,二叉树的中序,先序,后序遍历

public class BinaryTree {
	public static void main(String[] args) {
		int[] data = new int[10];
		for(int i = 0; i < data.length; i++) {
			data[i] = (int)(Math.random() * 100) + 1;
			System.out.print(data[i] + " ");
		}
		System.out.println();
		Node root = new Node();
		root.value = data[0];
		for(int i = 1; i < data.length; i++) {
			root.store(data[i]);
		}

		root.find(data[7]);
		System.out.println();
		System.out.println("----------------");
		root.find(23);
		System.out.println();
		System.out.println("----------------");
		root.preSearch();
		System.out.println();
		System.out.println("----------------");
		root.midSearch();
		System.out.println();
		System.out.println("----------------");
		root.afterSearch();
		System.out.println();
		System.out.println("----------------");
	}
}

class Node {
	int value;
	Node left;
	Node right;

	public void store(int value) {
		if(value < this.value) {
			if(left == null) {
				left = new Node();
				left.value = value;
			} else {
				left.store(value);
			}
		} else {
			if(right == null) {
				right = new Node();
				right.value = value;
			} else {
				right.store(value);
			}
		}
	}

	public boolean find(int value) {
		System.out.println("find : " + this.value);
		if(value == this.value) {
			return true;
		} else if(value < this.value) {
			if(left == null) {
				return false;
			} else {
				return left.find(value);
			}
		} else {
			if(right == null) {
				return false;
			} else {
				return right.find(value);
			}
		}
	}

	public void preSearch() {
		System.out.print(value + " ");
		if(left != null) {
			left.preSearch();
		}
		if(right != null) {
			right.preSearch();
		}
	}
	public void midSearch() {

		if(left != null) {
			left.midSearch();
		}
		System.out.print(value + " ");
		if(right != null) {
			right.midSearch();
		}
	}
	public void afterSearch() {

		if(left != null) {
			left.afterSearch();
		}
		if(right != null) {
			right.afterSearch();
		}
		System.out.print(value + " ");
	}
}

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

时间: 2024-08-22 12:16:42

二叉排序树,二叉树的中序,先序,后序遍历的相关文章

算法进化历程之“根据二叉树的先序和中序序列输出后序序列”

巧若拙(欢迎转载,但请注明出处:http://blog.csdn.net/qiaoruozhuo) 前不久在看到一个作业"根据二叉树的先序和中序序列输出后序序列",当时我参考<数据结构与算法(C语言)习题集>上的做法,先根据先中序序列确定一颗二叉树,然后后序遍历二叉树输出后序序列. 函数采用了递归算法,利用函数传入的先序和中序序列的左右边界,确定要处理的序列段,生成相应的二叉树. 基本思路是,把该段先序序列的第一个元素作为当前二叉树的根结点,然后在中序序列找到根结点.根结点

通过二叉树的中序序列和后序序列获取前序序列

二叉树的遍历方式常见的三种是:先序遍历(ABC).中序遍历(BAC).后序遍历(BCA) 先序遍历: 若二叉树为空,则空操作:否则: 访问根结点; 先序遍历左子树: 先序遍历右子树. 中序遍历: 若二叉树为空,则空操作:否则: 中序遍历左子树: 访问根结点: 中序遍历右子树. 后序遍历: 若二叉树为空,则空操作:否则: 后序遍历左子树: 后序遍历右子树: 访问根结点. 在学习到 根据遍历序列确定二叉树 时,知道了:可以通过二叉树的先中或者中后遍历序列唯一确定一棵二叉树. 根据算法描述 使用jav

先序序列和后序序列并不能唯一确定二叉树

数据结构的基础知识中重要的一点就是能否根据两种不同遍历序列的组合(有三种:先序+中序,先序+后序,中序+后序),唯一的确定一棵二叉树.然后就是根据二叉树的不同遍历序列(先序.中序.后序),重构二叉树.显然,这三种组合并不是都能唯一确定二叉树的,其中先序+后序就不能唯一确定一棵二叉树,其他两种组合可以唯一的确定一颗二叉树. 由先序序列和后序序列不能唯一确定一棵二叉树,因无法确定左右子树两部分. 反例:任何结点只有左子树的二叉树和任何结点只有右子树的二叉树,其前序序列相同,后序序列相同,但却是两棵不

中序表达式转后序表式式

中序表达式转后序表式式: 将中序表达式所有括号补全,然后将所有运算符向右移出无匹配的第一个右括号,去掉括号即为后序表式式 举例: 原式:a+b*(c+d/e) 补全括号:(a+(b*(c+(d/e)))) 操作符右移:(a(b(c(de)/)+)*)+ 去掉括号:abcde/+*+ 中序表达式转前序表式式: 将中序表达式所有括号补全,然后将所有运算符向左移出无匹配的第一个左括号,去掉括号即为前序表式式 举例: 原式:a+b*(c+d/e) 补全括号:(a+(b*(c+(d/e)))) 操作符右移

hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)

http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 4210    Accepted Submission(s): 1908 Problem Description A binary tree is a

华南理工数据结构大作业第二题 二叉树各种操作深度结点个数后序前序中序层次求祖先

/*#include<iostream> #include<windows.h> using namespace std ; struct BTNode { char data ; BTNode *left ; BTNode *right ; BTNode () { left = NULL ; right = NULL ; } } ; int main () { cout <<"题目所给的二叉树用括号表示法后表示为:A(B(D,E(H(J,K(L,M(,N))

HDU 1710Binary Tree Traversals(已知前序中序,求后序的二叉树遍历)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1710 解题思路:可以由先序和中序的性质得到 : 先序的第一个借点肯定是当前子树的根结点, 那么在 中序中找到这个结点, 则这个结点左边的节点属于左子树, 右边的属于右子树.然后递归遍历就可以了. 样例: 9 1 2 4 7 3 5 8 9 6 4 7 2 1 8 5 9 3 6 7 4 2 8 9 5 6 3 1 如图: 因此,用深搜就能轻松解决了,注意DFS中的变量,以及向清楚DFS的条件,这题就

7.5 中序式转后序式

7-6 toPosfix.c 1 #include <stdio.h> 2 #include <stdlib.h> 3 int PRI(char op) //设定算符的优先级 4 { 5 switch (op) 6 { 7 case '+': 8 case '-': 9 return 1; 10 case '*': 11 case '/': 12 return 2; 13 default: 14 return 0; 15 } 16 } 17 char *toPosfix(char

中序表达式 to 后序表达式

将带有计算的优先级和括号的中序表达式变成符合某文法的后序表达式. <编程导论(Java)·5.5.2>的参考资料 解释器模式中或许需要的工具 直接上代码. package intent.interpreter.calculator2; import java.util.HashMap; import java.util.Stack; import tool.God; public class Nothing{ private static HashMap<Character,Intege

[经典算法] 中序式转后序式/前序式

题目说明: 平常所使用的运算式,主要是将运算元放在运算子的两旁,例如a+b/d这样的式子,这称之为中序(Infix)表示式,对于人类来说,这样的式子很容易理 解,但由于电脑执行指令时是有顺序的,遇到中序表示式时,无法直接进行运算,而必须进一步判断运算的先后顺序,所以必须将中序表示式转换为另一种表示方 法.可以将中序表示式转换为后序(Postfix)表示式,后序表示式又称之为逆向波兰表示式(Reverse polish notation),它是由波兰的数学家卢卡谢维奇提出,例如(a+b)*(c+d