java :非递归方法的二叉搜索树,实现部分功能
来源:互联网 发布:怎么攻破一个软件 编辑:程序博客网 时间:2024/04/30 15:39
//
//实现了如下功能
public class BinarySearchTree {/** * * @author Administrator *嵌套类构造结点 * @param <Integer> */private static class BinaryNode<Integer>{public Integer data;public BinaryNode<Integer> lchild;public BinaryNode<Integer> rchild;public BinaryNode(Integer d,BinaryNode<Integer> l,BinaryNode<Integer> r){this.data = d;this.lchild = l;this.rchild = r;}}//根节点private BinaryNode<Integer> root;public BinarySearchTree(){root = null;}/** * 返回根节点 * @param x * @param r * @return */public BinaryNode<Integer> add(Integer x,BinaryNode<Integer> r){BinaryNode<Integer> tmp = r;BinaryNode<Integer> p = new BinaryNode<Integer>(x,null,null);if(r == null){r = p;}else{while(tmp.lchild!=p && tmp.rchild != p){if(x<tmp.data){if(tmp.lchild == null){tmp.lchild = p;}else{tmp = tmp.lchild;} }else if(x>tmp.data){ if(tmp.rchild == null){tmp.rchild = p;}else{tmp = tmp.rchild;}}}}return r;}/** * 返回最小的结点 * @param r * @return */public BinaryNode<Integer> findMin(BinaryNode<Integer> r){if(r != null){while(r.lchild != null){r = r.lchild;}}return r;}/** * 返回最大的结点 * @param r * @return */public BinaryNode<Integer> findMax(BinaryNode<Integer> r){if(r != null){while(r.rchild != null){r = r.rchild;}}return r;}//删除一个节点public BinaryNode<Integer> remove(Integer x,BinaryNode<Integer> r){BinaryNode<Integer> tmp = r;BinaryNode<Integer> p = null ;//指示目标结点的父亲if(r == null){throw new NullPointerException();}while(tmp.data != x){if(x<tmp.data){p = tmp;tmp = tmp.lchild;}else if(x<tmp.data){p = tmp;tmp = tmp.rchild;}}//如果待删结点是叶子结点if(tmp.lchild == null && tmp.rchild == null){if(tmp == r){tmp = null; //若为根节点,将根节点置空}else if(p.lchild == tmp){p.lchild = null;}else{p.rchild = null;}}else//如果为单叶子结点if(tmp.lchild == null || tmp.rchild == null){if(tmp == r){if(tmp.lchild == null){tmp = tmp.rchild;}else if(tmp.rchild == null){tmp = tmp.lchild;}}elseif(p.lchild == tmp){if(tmp.lchild == null){p.lchild = tmp.rchild;}else if(tmp.rchild == null){p.lchild = tmp.lchild;}} else if(p.rchild == tmp){if(tmp.lchild == null){p.lchild = tmp.rchild;}else if(tmp.rchild == null){p.lchild = tmp.lchild;}}}else {//目标结点的子结点都不为空BinaryNode<Integer> a = tmp ;BinaryNode<Integer> b = tmp.rchild ;while(b.lchild != null){//选右边数最小的数据a = b;b = b.lchild;}tmp.data = b.data;if(a == tmp){tmp.rchild = b.rchild;//若目标结点的右子结点没有左子节点}else{a.lchild = b.rchild;}}return r;}}
0 0
- java :非递归方法的二叉搜索树,实现部分功能
- 二叉搜索树的非递归实现
- 二叉搜索树递归&&非递归的基本实现
- 【数据结构】二叉搜索树的递归与非递归实现
- 非递归实现搜索二叉树
- 二叉搜索树的非递归C++实现
- java二叉树的遍历,递归与非递归方法
- java 实现二叉树【递归/非递归】
- Java实现二叉树的递归与非递归遍历
- Java实现二叉树的创建、递归/非递归遍历
- 二叉树的递归和非递归实现 java
- Java实现二叉树的递归、非递归遍历
- 二叉搜索树(递归和非递归分别实现)
- C++实现二叉搜索树(递归&非递归)
- 二叉树的先序遍历非递归实现方法
- 二叉树遍历的非递归实现方法
- 基于栈的非递归方法实现二叉树
- 二叉搜索树-非递归
- Fedora 23 系统安装
- 图像特效---Oilpaint油画滤镜
- 大话数据结构——算法
- js中去除空格
- struts2的模型驱动(推荐使用)、属性驱动模式
- java :非递归方法的二叉搜索树,实现部分功能
- 博弈论
- 图像特效---哈哈镜效果滤镜
- 继承关键字:public private protected
- discuz 论坛安装出现空白页
- 第十一周第二项目——圆柱的计算
- leetcode 182. Duplicate Emails
- Dialog样式的Activity
- Ubuntu 10.04 LTS 系统安装