JAVA二叉树的创建以及各种功能的实现

直接上代码了,代码说得很清楚了

package BTree;

public class BTree {
	private Node root;

	private class Node {
		private Node lchild;
		private Node rchild;
		private int data;

		public Node(int data) {
			this.lchild = null;
			this.rchild = null;
			this.data = data;
		}
	}

	public BTree() {
		root = null;
	}

	public Node getNode() {
		return root;
	}

	public void createTree(Node node, int data) {
		if (root == null) {
			root = new Node(data);
		} else {
			if (data < node.data) {
				if (node.lchild == null) {
					node.lchild = new Node(data);
				} else {
					createTree(node.lchild, data);
				}
			} else {
				if (node.rchild == null) {
					node.rchild = new Node(data);
				} else {
					createTree(node.rchild, data);
				}
			}
		}
	}
	/*前序遍历*/
	public void PreOrder(Node node) {
		if (node != null) {
			System.out.print(node.data + " ");
			PreOrder(node.lchild);
			PreOrder(node.rchild);
		}
	}
	/*中序遍历*/
	public void InOrder(Node node) {
		if (node != null) {
			InOrder(node.lchild);
			System.out.print(node.data + " ");
			InOrder(node.rchild);
		}
	}
	/*后序遍历*/
	public void TailOrder(Node node) {
		if (node != null) {
			TailOrder(node.lchild);
			TailOrder(node.rchild);
			System.out.print(node.data + " ");
		}
	}
	/*二叉树高度*/
	public int Depth(Node node){
		int dl = 0,dr =0;
		if(node!=null){
			dl = Depth(node.lchild);
			dr = Depth(node.rchild);
			if(dl>dr) return dl+1;
			return dr+1;
		}
		return 0;
	}
	/*节点的个数*/
	public int Point(Node node){
		if(node!=null){
			return Point(node.lchild)+Point(node.rchild)+1;
		}
		return 0;
	}
	/*叶子结点的个数*/
	public int Leaf(Node node){
		if(node==null) return 0;
		boolean flag = (node.lchild==null&&node.rchild==null);
		if(flag) return Leaf(node.lchild)+Leaf(node.rchild)+1;
		return Leaf(node.lchild)+Leaf(node.rchild);
	}
	/*出度为一的节点个数*/
	public int oneDegree(Node node){
		if(node==null) return 0;
	    boolean flag = (node.lchild==null&&node.rchild!=null)||(node.lchild!=null&&node.rchild==null);
	    if(flag) return oneDegree(node.lchild)+oneDegree(node.rchild)+1;
	    return oneDegree(node.lchild)+oneDegree(node.rchild);
	}
	/*出度为二的节点个数*/
	public int twoDegree(Node node){
		if(node==null) return 0;
	    boolean flag = (node.lchild!=null&&node.rchild!=null);
	    if(flag) return twoDegree(node.lchild)+twoDegree(node.rchild)+1;
	    return twoDegree(node.lchild)+twoDegree(node.rchild);
	}
}

  

package BTree;

public class BTreeDemo {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		int [] a ={4,3,2,6,11,8,9,10,1,5};
		//int [] a = {1,2,3,4,5};
		BTree bt = new BTree();
		for(int i=0;i<a.length;i++){
			bt.createTree(bt.getNode(), a[i]);
		}
		System.out.print("前序遍历:");
		bt.PreOrder(bt.getNode());
		System.out.println();
		System.out.print("中序遍历:");
		bt.InOrder(bt.getNode());
		System.out.println();
		System.out.print("后序遍历:");
		bt.TailOrder(bt.getNode());
		System.out.println();
		System.out.println("二叉树的高度:"+bt.Depth(bt.getNode()));
		System.out.println("节点的个数:"+bt.Point(bt.getNode()));
		System.out.println("叶子节点个数:"+bt.Leaf(bt.getNode()));
		System.out.println("出度为一的节点个数:"+bt.oneDegree(bt.getNode()));
		System.out.println("出度为二的节点个数:"+bt.twoDegree(bt.getNode()));
	}

}
前序遍历:4 3 2 1 6 5 11 8 9 10
中序遍历:1 2 3 4 5 6 8 9 10 11
后序遍历:1 2 3 5 10 9 8 11 6 4
二叉树的高度:6
节点的个数:10
叶子节点个数:3
出度为一的节点个数:5
出度为二的节点个数:2

  

  

时间: 2024-10-22 12:56:12

JAVA二叉树的创建以及各种功能的实现的相关文章

二叉树的创建和四种遍历(前序、先序、后序、层次、结点的层数、深度、叶子数等)—java描述

二叉树的创建和四种遍历(前序.先序.后序.层次.结点的层数.深度.叶子数等)—java描述 package javab; //树的结点类 public class TreeNode { String data; TreeNode leftChild,rightChild,next; public TreeNode(String data){ this.data=data; } public TreeNode(String data,TreeNode left,TreeNode right){ l

Java实现图片裁剪预览功能

Java实现图片裁剪预览功能 在项目中,我们需要做些类似头像上传,图片裁剪的功能,ok看下面文章! 需要插件:jQuery Jcrop 后端代码: package org.csg.upload; import java.awt.Rectangle; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import 

java设计模式-创建型

1.设计模式介绍 1.1 设计模式的概念 1.设计模式是一套被反复使用,多数人知晓,经过分类编码目的的优秀代码设计经验的总结. 2.设计模式贯彻的原理:面向接口编程,而不是面向对象实现. 3.设计模式的目标:降低耦合性,增强灵活性. 1.2 设计模式的要素 1.模式名称 2.问题 3.环境与初始环境 4.解决方案 5.效果 6.举例 7.末态环境 8.推理 9.其他有关模式 10.已知的应用 1.3设计模式的分类 1.创建型 1.1  单例模式 1.2  工厂模式 1.3  抽象工厂模式 1.4

java Html2Image 实现html转图片功能

//java Html2Image 实现html转图片功能 // html2image  HtmlImageGenerator imageGenerator = new HtmlImageGenerator(); String htmlstr = "<table width='654' cellpadding='0' cellspacing='0' bordercolor='#FFFFFF'><tr><td><img       src='http://

java虚拟机学习(二)java对象的创建及访问定位

java对象的创建过程: 对象的创建开始: 虚拟机遇到new 关键字的时候,首先去常量池中寻找有没有这个类的符号引用,并且检查该引用的类是否已经被加载,解析,和初始化过,如果没有则会先执行该类的加载过程, 在通过检查后,虚拟机为该新生对象分配内存. 分配内存: 为对象分配内存有俩种方式: 一种分配方式是"指针碰撞",在内存规整的时候,已使用的内存在一侧,未使用的内存在一侧时,中间为指示器指针,这个时候的内存分配就是把指示器指针向未使用的区域移动至创建的对象大小相等的距离. 另一种分配方

Java利用webservice创建接口案例源码

环境要求: JDK1.7,并配置Java的环境变量 BaseDao  接口: /** * 要使得成为一个可供访问的接口,必须添加:@WebService * */ @WebServicepublic interface BaseDao {    //添加一个加法的接口        @WebResult(name="addddddre")    public int add(@WebParam(name="add01")int a,@WebParam(name=&q

[Effective Java]第二章 创建和销毁对象

第一章      前言 略... 第二章      创建和销毁对象 1.            考虑用静态工厂方法代替构造器 创建对象方法:一是最常用的公有构造器,二是静态工厂方法.下面是一个Boolean的简单示例: public static Boolean valueOf(boolean b) { return (b ? Boolean.TRUE : Boolean.FALSE); } l  静态工厂方法与构造器不同的第一大优势在于,它们有名称. 作用不同的公有构造器只能通过参数来区别(因

56 java编程思想——创建窗口和程序片 用户接口API

56.java编程思想--创建窗口和程序片 用户接口API Java 1.1 版同样增加了一些重要的新功能,包括焦点遍历,桌面色彩访问,打印"沙箱内"及早期的剪贴板支持. 焦点遍历十分的简单,因为它显然存在于AWT 库里的组件并且我们不必为使它工作而去做任何事.如果我们制造我们自己组件并且想使它们去处理焦点遍历,我们过载isFocusTraversable()以使它返回真值.如果我们想在一个鼠标单击上捕捉键盘焦点,我们可以捕捉鼠标按下事件并且调用requestFocus()需求焦点方法

52 java编程思想——创建窗口和程序片 程序片限制

52.java编程思想--创建窗口和程序片 程序片限制 出于安全缘故,程序片十分受到限制,并且有很多的事我们都不能做.您一般会问:程序片看起来能做什么,传闻它又能做什么:扩展浏览器中WEB 页的功能.自从作为一个网上冲浪者,我们从未真正想了解是否一个WEB 页来自友好的或者不友好的站点,我们想要一些可以安全地行动的代码.所以我们可能会注意到大量的限制: (1) 一个程序片不能接触到本地的磁盘.这意味着不能在本地磁盘上写和读,我们不想一个程序片通过WEB页面阅读和传送重要的信息.写是被禁止的,当然