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

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. MyBatis之二级缓存

    二级缓存与一级缓存区别:二级缓存的范围更大,多个sqlSession可以共享一个UserMapper的二级缓存区域. 每一个mapper都有一个自己的二缓存区域(按namespace区分),两个map ...

  2. 51nod 1215 数组的宽度&poj 2796 Feel Good(单调栈)

    单调栈求每个数在哪些区间是最值的经典操作. 把数一个一个丢进单调栈,弹出的时候[st[top-1]+1,i-1]这段区间就是弹出的数为最值的区间. poj2796 弹出的时候更新答案即可 #inclu ...

  3. 如何用好 github 中的 watch、star、fork

    http://www.jianshu.com/p/6c366b53ea41 https://www.zhihu.com/question/20431718 在每个 github 项目的右上角,都有三个 ...

  4. HDU1394 逆序数

    Minimum Inversion Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java ...

  5. Codeforces Round #202 (Div. 2) B,C,D,E

    贪心 B. Color the Fence time limit per test 2 seconds memory limit per test 256 megabytes input standa ...

  6. Hadoop Yarn事件处理框架源码分析

    由于想在项目中使用类似yarn的事件处理机制,就看了实现.主要是由Dispatcher.java,EventHandler.java,Service.java这3个类撑起来的. 在事件处理之前,先注册 ...

  7. Kubernetes - Launch Single Node Kubernetes Cluster

    Minikube is a tool that makes it easy to run Kubernetes locally. Minikube runs a single-node Kuberne ...

  8. 自己做的jquery的autocomplete的一个例子

    转载自:http://dada-fangfang.iteye.com/blog/695464 首先下载jquery.js和jquery.autocomplete.js 注意:jquery.js 要放在 ...

  9. [Luogu 1640] SCOI2010 连续攻击游戏

    [Luogu 1640] SCOI2010 连续攻击游戏 DP太恶心,回来二分图这边放松一下心智. 这个建图真的是难以想到. 因为要递增啊,属性值放x部,装备放y部,对应连边跑Hungary就好了. ...

  10. 【比赛】洛谷夏令营NOIP模拟赛

    Day1 第一题 水题 第二题 题意:一个n*m的字符矩阵从左上到右下,经过字符形成回文串的路径数.n≤500 回文串,考虑两段往中间DP. f[k][x][y]表示走了k步,左上点横坐标为x,右下点 ...