博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java代码构建一棵二叉树(二叉查找树)
阅读量:5827 次
发布时间:2019-06-18

本文共 1724 字,大约阅读时间需要 5 分钟。

hot3.png

首先,是关于二叉树的定义,我在这阐述一下,避免还有些朋友不知道

二叉树是N个结点的有限集合,该集合或者为空集,或者由一个根节点跟两棵互不相交的、分别称为根节点的左子树或者右子树的二叉树组成,

 

二叉树有以下几个特点

1:每个结点最多有两个子树

2:左子树跟右子树是有序的

3:及时树中某个结点只有一棵子树,也要区分是左子树还是右子树

 

二叉树有以下几个形态:

1:空二叉树

2:只有一个根结点

3:根结点只有左子树

4:根结点只有右子树

5:根结点既有左子树,又有右子树

 

 

以上,是摘自 大话数据结构对二叉树的描述,

 

------------------------------------我是分割线----------------------------------

 

以下是二叉树的常见结构,只大概列举一下,二叉树的逻辑关系

 

004145_f0q2_2278977.png

004300_7xTU_2278977.png

 

 

说完二叉树的逻辑关系,下面我们说下,二叉树的存储结构,下面我们只介绍二叉链表存储

因为二叉树的每个结点最多有两个孩子,所以我们为它设计一个数据域跟两个指针域,两个指针域分别表示左结点跟右节点,下面是结构示意图

 

005159_P8XO_2278977.png

 

 

结构图有了,剩下的,我们就是将结构图转换为代码

 

public class BinaryTree {	//根结点,默认为null	private Node root = null;	public Node getRoot() {		return root;	}	//通过内部类,构建结点	private class Node{		//左节点		private Node left;		//数据域		private int data;		//右节点		private Node right;		public Node(int data) {			this.data = data;		}		public Node getLeft() {			return left;		}		public void setLeft(Node left) {			this.left = left;		}		public int getData() {			return data;		}		public void setData(int data) {			this.data = data;		}		public Node getRight() {			return right;		}		public void setRight(Node right) {			this.right = right;		}	}	/**	 * 创建人:贺小五	 * 创建时间:2017-09-16 00:54:52	 * 描述:	 * 		构建二叉树	 * 	    Node 为结点,	 * 	    data 为数据	 */	private void buildBiTree(Node node,int data){		//如果根结点是空,那么设置根结点,并且设置数据域		if(root == null){			root = new Node(data);		}else{			/**			 * 根结点不为空,那么判断数据是否小于当前结点的数据			 */			if(data

 

以上就是构建一个普通二叉树的代码,根结点的左叶子结点会小于根结点,右叶子结点反之,

然后我们上一段测试代码,往该树插入数据,

 

public static void main(String[] args) {		int[] datas = {72,37,29,55,51,80};		BinaryTree biTree = BinaryTree.createBiTree(datas);	}

 

 

执行测试代码后,结构应该是如下图(测试的同学可以debug 看树的结构)

 

011152_TSZv_2278977.png

 

以上就是构建一个二叉树的代码,很简单,下篇分享一下二叉树的遍历

 

 

 

到这,文章就结束了!

以上,均为本人个人理解,比较简单的理解,或许跟各位看官理解的有出入,欢迎指正交流

欢迎转载,请注明出处跟作者,谢谢!

 

转载于:https://my.oschina.net/u/2278977/blog/1538278

你可能感兴趣的文章
Java annotation 自定义注释@interface的用法
查看>>
go的接口
查看>>
[UVA 11997] K Smallest Sums
查看>>
Android 配置从GitHub上下载下来的不太规则的源代码库,并保证程序正常运行
查看>>
《Spring1之第四次站立会议》
查看>>
算法导论精华总结 ~ 图算法
查看>>
JS正则
查看>>
我有一个 APP 创意,如何将其实现?
查看>>
简单的平台设备驱动
查看>>
JS---设置简易红绿灯
查看>>
三大UML建模工具Visio、Rational Rose、PowerDesign的区别
查看>>
ios如何实现被键盘遮挡时,带有textfield的tableview自动上移
查看>>
seek()和tell()在文件里转移
查看>>
响应式布局3
查看>>
css3 nth-child 与 nth-of-type 的区别
查看>>
BZOJ3110:[ZJOI2013]K大数查询(整体二分)
查看>>
var decode = [+!+[]+[+[]]]+[!+[]+!+[]+!+[]]+[!+[]+!+[]+!+[]+!+[]+!+[]+!+[]]+[+[]];
查看>>
TOJ 1139.Compromise
查看>>
为iOS7重新设计你的App
查看>>
Python Websocket消息推送---GoEasy
查看>>