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

JAVA二叉树的创建以及各种功能的实现的更多相关文章
- java 二叉树的创建 遍历
本来说复习一下BFS和DFS,辗转就来到了二叉树...本文包括二叉树的创建和遍历 概念 数据:1 2 3 4 5 6 7生成一颗二叉树 上面的数是数据,不是位置,要区别一下数据和位置 红色的代表位置, ...
- 数据结构二叉树的java实现,包括二叉树的创建、搜索、删除和遍历
根据自己的学习体会并参考了一些网上的资料,以java写出了二叉树的创建.搜索.删除和遍历等操作,尚未实现的功能有:根据先序和中序遍历,得到后序遍历以及根据后序和中序遍历,得到先序遍历,以及获取栈的深度 ...
- Effective Java笔记一 创建和销毁对象
Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...
- Java Struts2 POI创建Excel文件并实现文件下载
Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...
- java Html2Image 实现html转图片功能
//java Html2Image 实现html转图片功能 // html2image HtmlImageGenerator imageGenerator = new HtmlImageGenera ...
- java实现单链表的增删功能
JAVA 实现单链表的增删功能 package linked; class LinkedTable{ } public class LinkedTableTest { public static vo ...
- JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架)
JAVA 实现 QQ 邮箱发送验证码功能(不局限于框架) 本来想实现 QQ 登录,有域名一直没用过,还得备案,好麻烦,只能过几天再更新啦. 先把实现的发送邮箱验证码更能更新了. 老规矩,更多内容在注释 ...
- 二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
要求:以左右孩子表示法实现链式方式存储的二叉树(lson—rson),以菜单方式设计并完成功能任务:建立并存储树.输出前序遍历结果.输出中序遍历结果.输出后序遍历结果.交换左右子树.统计高度,其中对于 ...
- Java并发--如何创建线程
下面是本文的目录大纲: 一.Java中关于应用程序和进程相关的概念 二.Java中如何创建线程 三.Java中如何创建进程 转载原文链接:http://www.cnblogs.com/dolphin0 ...
随机推荐
- application.properties 改成 application.yml
application.properties 改成 application.yml
- 几个与特殊字符处理有关的PHP函数(过滤html js 标签)
函数名 释义 介绍 htmlspecialchars 将与.单双引号.大于和小于号化成HTML格式 &转成&"转成"' 转成'<转成<>转成> ...
- 那些常用的JS命令
window.location.reload()刷新当前页面. parent.location.reload()刷新父亲对象(用于框架) opener.location.reload()刷新父窗口对象 ...
- [ssh]ssh系列之一
1.使用ssh建立sock代理 ssh -D 7070 -f -N user@host -D -f 后台执行 -N 不登陆shell执行
- [技巧篇]00.TrimFilter去掉jsp页面空白,提升访问速度
最近感觉项目访问的速度有点慢,我就在网络中一顿搜索,发下了一个好东东,忍不住跟大家分享,希望大家可以试一试,确实有提升的空间啊!要求去除空白区.提取公用代码.减小页面. 胖先生乱搜之下,找到了Trim ...
- js的作用域深入理解
一.什么是作用域 作用域是指对某一变量和方法具有访问权限的代码空间,Javascript的作用域只有两种:全局作用域和本地作用域,本地作用域是按照函数来区分的(即全局变量和局部变量)) 局部变量:只有 ...
- [洛谷P2571] [SCOI2010]传送带
题目描述 在一个2维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.lxhgww在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在lxh ...
- [hdu2460]network(依次连边并询问图中割边数量) tarjan边双联通分量+lca
题意: 给定一个n个点m条边的无向图,q个操作,每个操作给(x,y)连边并询问此时图中的割边有多少条.(连上的边会一直存在) n<=1e5,m<=2*10^5,q<=1e3,多组数据 ...
- Android通知栏介绍与适配总结
由于历史原因,Android在发布之初对通知栏Notification的设计相当简单,而如今面对各式各样的通知栏玩法,谷歌也不得不对其进行更新迭代调整,增加新功能的同时,也在不断地改变样式,试图迎合更 ...
- iOS多线程
iOS开发Demo(示例程序)源代码
本系列所有开发文档翻译链接地址:iOS7开发-Apple苹果iPhone开发Xcode官方文档翻译PDF下载地址(2013年12月29日更新版) iOS程序源代码下载链接:01.大任务.zip22 ...