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 ...
 
随机推荐
- How far away ? LCA求树上两点距离
			
How far away ? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
 - 【PHP】Windows下配置用mail()发送邮件
			
ZZ:解决windows系统下php.ini邮件配置正确不发送邮件的问题 php mail()函数在windows不能用,需要安装sendmail,假如是用的XAMPP,则已经下载好,不需要重新下载~ ...
 - Spring注解@Resource和@Autowired的区别
			
@Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上. java为我们提供了 javax.annotation.Resource这个注解. s ...
 - 【BZOJ1449&&2895】球队预算 [费用流]
			
球队预算 Time Limit: 10 Sec Memory Limit: 256 MB[Submit][Status][Discuss] Description 在一个篮球联赛里,有n支球队, 球 ...
 - szoj657 【AHSDFZNOI 7.2 WuHongxun】Odd
			
[题目大意] 给出$n$个数$a_1, a_2, ..., a_n$,求有多少个区间$[l, r]$,满足每个数都出现了奇数次. $1 \leq n \leq 2 * 10^5, 0 \leq a_i ...
 - 【LibreOJ】#538. 「LibreOJ NOIP Round #1」数列递推
			
[题意]LibreOJ [算法]乱搞 [题解]容易发现数列最后一定单调,最后单调递增则最大值赋为最后一个,反之最小值赋为最后一个,然后处理一些细节就可以AC,要注意以下几点: 1.数列连续三项以及数列 ...
 - html+js+node实现五子棋线上对战,五子棋最简易算法
			
首先附上我的github地址,https://github.com/jiangzhenfei/five,线上实例:http://47.93.103.19:5900/client/ 线上实例,你可以随意 ...
 - C#编写程序监测某个文件夹内是否有文件进行了增,删,改的动作?
			
新建一个Console应用程序,项目名称为“FileSystemWatcher”,Copy代码进,编译后就可以用了.代码如下: using System; using System.Collectio ...
 - Edgware Feign hystrix-dashboard
			
相关依赖 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
 - 集合框架源码学习之LinkedList
			
0-1. 简介 0-2. 内部结构分析 0-3. LinkedList源码分析 0-3-1. 构造方法 0-3-2. 添加add方法 0-3-3. 根据位置取数据的方法 0-3-4. 根据对象得到索引 ...