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

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

  

  

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

  1. java 二叉树的创建 遍历

    本来说复习一下BFS和DFS,辗转就来到了二叉树...本文包括二叉树的创建和遍历 概念 数据:1 2 3 4 5 6 7生成一颗二叉树 上面的数是数据,不是位置,要区别一下数据和位置 红色的代表位置, ...

  2. 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历

    根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...

  3. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  4. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

  5. java Html2Image 实现html转图片功能

    //java Html2Image 实现html转图片功能 // html2image  HtmlImageGenerator imageGenerator = new HtmlImageGenera ...

  6. java实现单链表的增删功能

    JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...

  7. JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)

    JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...

  8. 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)

    要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...

  9. Java并发--如何创建线程

    下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...

随机推荐

  1. Leetcode 200. 岛屿的个数(扩展)

    1.题目描述 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量.一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的.你可以假设网格的四个边均被水包围. 示例 ...

  2. svn稀疏目录--通过设置工作目录的深度(depth)实现目录树的部分签出

    对于一个大的版本库来说,本地工作目录签出整个目录树是即费时又占地儿的.虽然可以只签出某个子目录树,但有时候还是需要从根目录签出.那么,怎么才能只把自己感兴趣的子目录签出来呢? 从svn1.5版开始,提 ...

  3. MongoDB入门(4)- MongoDB日常操作

    MongoDB客户端 MongoDB有很多客户端 MongoVue Robomongo MongoDB命令行 启动mongo shell 在windows下,双击mongo.exe可以启动mongo ...

  4. 图论:Prufer编码-Cayley定理

    BZOJ1430:运用Cayley定理解决树的形态统计问题 由Prufer编码可以引申出来一个定理:Cayley 内容是不同的n结点标号的树的数量为n^(n-2) 换一种说法就是一棵无根树,当知道结点 ...

  5. Epoll模型讲解

    1.流模型 首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象. 不管是文件,还是套接字,还是管道,我们都可以把他们看作流. 之后我们来讨论I/O的操作, ...

  6. MyBatis框架的使用及源码分析(十) CacheExecutor,SimpleExecutor,BatchExecutor ,ReuseExecutor

    Executor分成两大类,一类是CacheExecutor,另一类是普通Executor. 普通类又分为: ExecutorType.SIMPLE: 这个执行器类型不做特殊的事情.它为每个语句的执行 ...

  7. 策略模式 C#

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 抽象策略角色: 策略类,通常由一个接口或者抽象类实现. 具体策略角色:包装了 ...

  8. ssh无密码登录认证失败

    http://www.2cto.com/os/201401/271150.html https://unix.stackexchange.com/questions/36540/why-am-i-st ...

  9. Chrome profile manager

    由于Firefox有profile manager这么一说,所以自然联想到chrome应该也有. 默认chrome的profile manager被禁止了. 1. chrome://flags 2. ...

  10. 获取数据源数据的实现---Architecting Android

    UserRepository,这个接口,描述了Repository提供给用户的功能就是getUsers,getUser(ID).用户只管使用,其它细节无需理会. /** * Interface tha ...