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 ...
随机推荐
- JavaScript去除空格trim()的原生实现
W3C那帮人的脑袋被驴踢了,直到javascript1.8.1才支持trim函数(与trimLeft,trimRight),可惜现在只有firefox3.5支持.由于去除字符串两边的空白实在太常用,各 ...
- Linq改进
原代码: foreach (var item in pageData) { list.Add(new tn_Manager { UserName = item.UserName, IsAudit = ...
- Eclipse集成Android NDK及导出Jar和so动态库
一.安装Cygwin 在Windows环境而又不想使用linux环境,可以安装cygwin(http://www.cygwin.com/ ),为了使用gcc注意cygwin的必选安装包在devel目录 ...
- Kubernetes - Start containers using Kubectl
In this scenario, you'll learn how to use Kubectl to create and launch Deployments, Replication Cont ...
- Independence.
It's not giving up, it's letting go, and moving to a better place. I will survive and be the one who ...
- CAS 逻辑流程图
- 判定对象是否存活的算法----GC_ROOT算法
要应用GC_ROOT算法,判定某个对象是否会被回收,关键是要确定root.确定root之后,你就可以根据代码绘制可达链,从而就可以进行分析了,分析哪些对象会被泄漏,哪些对象会被回收,如果GC执行的时候 ...
- 2008 APAC local onsites C Millionaire (动态规划,离散化思想)
Problem You have been invited to the popular TV show "Would you like to be a millionaire?" ...
- 转载:WebView
前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView的组件实现的.今 ...
- Fiddler-- 安装HTTPs证书
1. 现在很多带有比较重要信息的接口都使用了安全性更高的HTTPS,而Fiddler默认是抓取HTTP类型的接口,要想查看HTTPS类型接口就需要安装fiddler证书. 2.打开Fiddler, ...