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

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. MySQL5.7 添加、删除用户与授权

    mysql -uroot -proot 例子: 创建用户mysql> CREATE USER 'xiaoyaoji'@'%' IDENTIFIED BY 'xiaoyaoji';Query OK ...

  2. 将shell返回的结果保存至数组

    如下,我需要将u1和u2提取出保存至数组,方便后续的调用 root@ubuntu:~# lxc list+------+---------+------------------------------ ...

  3. 使用snmp4j实现Snmp功能(一)

    相关链接:Snmp学习笔记使用snmp4j实现Snmp功能(一)使用snmp4j实现Snmp功能(二)使用snmp4j实现Snmp功能(三) 上一篇文章讲了Snmp的一些基本概念(Snmp学习笔记), ...

  4. 关于我之前写的修改Windows系统Dos下显示的用户名之再修改测试

    最近看到蛮多网友反映,自己修改Dos下用户名后出现了很多的问题--今天抽了时间,再次修改测试... ================= 提前说明:我自己修改了很多次没发现任何问题,<为避免修改可 ...

  5. python实现堆栈、队列

    一.利用python列表实现堆栈和队列 堆栈: 堆栈是一个后进先出的数据结构,其工作方式就像生活中常见到的直梯,先进去的人肯定是最后出. 我们可以设置一个类,用列表来存放栈中的元素的信息,利用列表的a ...

  6. sqlserver 个人整理

    1.创建临时表(临时表的生命周期是当前回话中) //创建临时表是使用#+表名 //判断临时表是否存在 if object_id('tempdb..#ttt1') is not null Begin d ...

  7. Linux下Tomcat重启脚本

    我们重启Tomcat服务的时候,Tomcat自带的shutdown.sh脚本有时并不能真正杀死进程,经常需要我们用“kill -9 pid”的方式来杀死进程. 下面的脚本可以简化我们的操作,执行可杀死 ...

  8. 洛谷P2868 [USACO07DEC]观光奶牛 Sightseeing Cows

    题目描述 Farmer John has decided to reward his cows for their hard work by taking them on a tour of the ...

  9. list互转datatable 支持Nullable转换

    /// <summary> /// list转datatable /// </summary> /// <param name="list">& ...

  10. JSX语法规范

    1.只有一个开始节点和一个尾节点 正确的写法 ReactDOM.render( <div>hello,你好</div>, document.body ) 错误的写法,开始节点和 ...