JAVA中实现二叉树

前序遍历的规则如下:

⑴访问结点本身(N),
⑵遍历该结点的左子树(L),
⑶遍历该结点的右子树(R)。

根据访问结点操作发生位置命名:
① NLR: 前序遍历(PreorderTraversal亦称(先序遍历))
——访问根结点的操作发生在遍历其左右子树之前。
② LNR: 中序遍历(InorderTraversal)
——访问根结点的操作发生在遍历其左右子树之中(间)。
③ LRN: 后序遍历(PostorderTraversal)
——访问根结点的操作发生在遍历其左右子树之后。

/**
 * @Project: struts2
 * @Title: BinaryTreeTest.java
 * @Package com.yza.struct
 * @author yongzhian
 * @date 2014-10-8 下午4:29:54
 * @Copyright: 2014 www.yineng.com.cn Inc. All rights reserved.
 * @version V1.0
 */
package com.yza.struct;

/**
 * @ClassName BinaryTreeTest
 * @Description 二叉树
 * @author yongzhian
 * @Date 2014-10-8
 */
public class BinaryTreeTest {
	private BinaryTree root = null;

	public BinaryTreeTest() {
		init();
	}

	private void init() {
		int data[] = { 12, 11, 34, 45, 67, 38, 56, 43, 22, 8 };
		root = new BinaryTree(data[0]);
		System.out.println("二叉树的中的数据结构:");
		System.out.println("------------------------------------");
		System.out.println(data[0] + ":root");
		for (int i = 1; i < data.length; i++) {
			System.out.print(data[i] + ":");
			root.insertTree(root, data[i]);
		}
		System.out.println("------------------------------------");
	}

	public void serach(int key) {
		if (searchkey(root, key)) {
			System.out.println("找到了:" + key);
		} else {
			System.out.println("没有找到:" + key);
		}
	}

	private boolean searchkey(BinaryTree root, int key) {
		if (root == null) {
			return false;
		} else if (root.data == key) {
			return true;
		} else if (key >= root.data) { //key比根的值大则查询右变
			return searchkey(root.rightpoiter, key);
		}
		return searchkey(root.leftpoiter, key);//如果key比根小则查询左边
	}
	
	public static void main(String[] args) {
		 BinaryTreeTest b = new BinaryTreeTest();
		  int key = 8; //key:任意数值
		  b.serach(key); //到二叉树中查找
	}
}

class BinaryTree {
	int data;
	BinaryTree leftpoiter;
	BinaryTree rightpoiter;

	BinaryTree(int data) {
		this.data = data;
		leftpoiter = null;
		rightpoiter = null;
	}

	// 将数据插入到二叉树中 数据大的放到右边节点 小的放到左边节点
	public void insertTree(BinaryTree root, int data) {
		if (data >= root.data) {
			if (root.rightpoiter == null) {
				System.out.println(" -> new rightpoiter");
				root.rightpoiter = new BinaryTree(data);
			} else {
				System.out.print(" -> rightpoiter");
				insertTree(root.rightpoiter, data);
			}
		} else {
			if (root.leftpoiter == null) {
				System.out.println(" -> new leftpoiter");
				root.leftpoiter = new BinaryTree(data);
			} else {
				System.out.print(" -> leftpoiter");
				insertTree(root.leftpoiter, data);
			}
		}
	}
}

输出:
二叉树的中的数据结构:
------------------------------------
12:root
11: -> new leftpoiter
34: -> new rightpoiter
45: -> rightpoiter -> new rightpoiter
67: -> rightpoiter -> rightpoiter -> new rightpoiter
38: -> rightpoiter -> rightpoiter -> new leftpoiter
56: -> rightpoiter -> rightpoiter -> rightpoiter -> new leftpoiter
43: -> rightpoiter -> rightpoiter -> leftpoiter -> new rightpoiter
22: -> rightpoiter -> new leftpoiter
8: -> leftpoiter -> new leftpoiter
------------------------------------
找到了:8


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值