递归方式实现二叉排序树的创建、打印、删除和搜索
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
递归实现二叉排序树
一二叉排序树的基本知识
二叉排序树的基础知识如下:
二叉排序树首先是一棵树,具有树的数据结构具备的所有性质,并且同时还具备下面这些特殊的性质。
(1)二叉排序树的结点是有限个元素的集合,并且每个结点上最多只能存在两个子结点(分别是左子树和右子树)
(2)对于二叉排序树而言,每个存在子结点的结点都存在左子树小于其本身,而右子树大于其本身
除了上面提到的内容,我们还需要知道两个名词:
(1)满二叉树:所有结点都达到最大的二叉树称为满二叉树
(2)完全二叉树:叶子结点仅在层次最大的两层出现,对于任意一个结点,左子树高度只能等于右子树高度或右子树高度加一
二抽象二叉排序树的数据类型
对于使用Java实现二叉排序树,首先需要抽象其二叉树的数据类型。也就是需要构造一个基本二叉树的基础操作的类和一个二叉树结点数据类型。
第一步分析结点数据类型:二叉树的结点包括本身的数据和左右子树的位置。在Java 中可以构造一个类来实现这样的数据结构。
第二步是去设计二叉树的基本操作,这里需要分析二叉排序树的基本功能然后去构造一个类来完成,这需要用到上一步中的自定义类型。
二叉树基本功能:构造一个空树、插入元素、查找元素、删除元素,打印树的全部元素等这些基本操作。根据这些基本功能,可以得出该类需要完成包括构造函数(构造一个空树)、插入元素(成员函数)、查找元素(成员函数)、删除元素(成员函数)和遍历打印树(成员函数)的基本操作。
三实现二叉排序树的数据类型
3.1 构造二叉树的结点的数据类型
首先构造二叉树的结点的数据类型。该结点包括结点数据、左子树链接和右子树链接。其中左右子树与该结点的结点类型是一样的。该类还需要一个构造函数,用来初始化左右子树为空。同时,提供成员变量的读写器。代码如下:
(成员函数)
package com.xxs.java;
/**
* 二叉树结点的Java实现
* 用递归的办法描述二叉树的创建、打印、删除和搜索
* @author Administrator
*
*/
publicclass BinaryTreeNode {
privateint data; //结点数据
private BinaryTreeNode leftTreeNode;//左子树
private BinaryTreeNode rightTreeNode;//右子树
/**
* 构造函数
*/
public BinaryTreeNode(){
leftTreeNode=null;
rightTreeNode=null;
}
/**
* @return the data
*/
publicint getData() {
return data;
}
/**
* @param data the data to set
*/
publicvoid setData(int data) {
this.data = data;
}
/**
* @return the leftTreeNode
*/
public BinaryTreeNode getLeftTreeNode() {
return leftTreeNode;
}
/**
* @param leftTreeNode the leftTreeNode to set
*/
publicvoid setLeftTreeNode(BinaryTreeNode leftTreeNode) { this.leftTreeNode = leftTreeNode;
}
/**
* @return the rightTreeNode
*/
public BinaryTreeNode getRightTreeNode() {
return rightTreeNode;
}
/**
* @param rightTreeNode the rightTreeNode to set
*/
publicvoid setRightTreeNode(BinaryTreeNode rightTreeNode) { this.rightTreeNode = rightTreeNode;
}
}
3.2 构造二叉排序树的基本操作封装类
3.2.1 二叉树类的基本框架
构造好了二叉树的结点的数据类型后,现在要做的就是构造一个封装类,封装了二叉排序树的基本操作,包括添加、查找、打印和删除操作。该类中包含一个成员变量为二叉树的结点类型的root,基本操作当作类的成员函数。该类的基本框架如下:
package com.xxs.java;
/**
* 二叉树类的Java实现用递归的办法描述二叉树的创建、插入、打印、删除和搜索
*
* @author Administrator
*
*/
publicclass BinaryTree {
private BinaryTreeNode root;// 根结点
/**
* 构造函数
*/
public BinaryTree() {
root = null;
}
/**
* 删除结点
* @param data
*/
publicvoid remove(int data) {
}
/**
* 插入一个元素,数据为data
* @param data 插入元素的数据
*/
publicvoid insert(int data){
}
/**
* 递归查找数据为data的结点
* @param data 结点数据
* @return存在则返回true,否则返回false */
publicboolean isExist(int data){ returnfalse;
}
/**
* 遍历打印二叉树
*/
publicvoid print(){
}
}