博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
二叉排序树 -- 增删查改
阅读量:6271 次
发布时间:2019-06-22

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

1. 二叉排序树 -- 定义

2. 二叉排序树 -- 增

3. 二叉排序树 -- 删

4. 二叉排序树 -- 查

5. 二叉排序树 -- 改

6. 二叉排序树 -- 实现

  Class : 

package lime.tree;import java.util.Arrays;/** * @Author: Lime * @Description: * @Date:Create in 19:25 2017/10/28 */public class BSTTree {    private Integer value;    private BSTTree PChild;    private BSTTree LChild;    private BSTTree RChild;    public BSTTree(Integer value) {        this.value = value;    }    public static void showTree(BSTTree root) {        if (null == root) {            return;        }        showTree(root.getLChild());        System.out.print(root.getValue() + "  ");        showTree(root.getRChild());    }    public static boolean addTree(BSTTree root, Integer value) {        if (null == value) {            return false;        }        if (null == root) {            root = new BSTTree(value);            return true;        }        if (value == root.getValue()) {            return false;        } else if (value < root.getValue()) {            if (null == root.getLChild()) {                root.setLChild(value);                root.getLChild().setPChild(root);                return true;            } else {                return addTree(root.getLChild(), value);            }        } else {            if (null == root.getRChild()) {                root.setRChild(value);                root.getRChild().setPChild(root);                return true;            } else {                return addTree(root.getRChild(), value);            }        }    }    public static BSTTree searchTree(BSTTree root, Integer value) {        if (null == root || null == value) {            return null;        }        if (value == root.getValue()) {            return root;        } else if (value < root.getValue()) {            return searchTree(root.getLChild(), value);        } else {            return searchTree(root.getRChild(), value);        }    }    public static void deleteTree(BSTTree root, Integer value) {        if (null == root || null == value) {            return;        }        root = searchTree(root, value);        if (null == root) {            return;        }        if (null == root.getRChild() && null == root.getLChild()) {            if (null == root.getPChild()) {//                1.只有一个根节点                root = null;            } else if (root == root.getPChild().getLChild()) {//                2. 删除左叶子节点                root.getPChild().setLChild((BSTTree) null);            } else {//                3. 删除右叶子节点                root.getPChild().setRChild((BSTTree) null);            }        } else if ((null == root.getLChild()) ^ (null == root.getRChild())) {            if (null == root.getPChild()) {//                1. 根节点下只有一个子树                root = (null == root.getLChild()) ? root.getRChild() : root.getLChild();            } else if (root == root.getPChild().getRChild()) {//                2. root 是父节点的右子树,将root的唯一子树放到父节点的右子树上                root.getPChild().setRChild(null == root.getLChild() ? root.getRChild() : root.getLChild());                root.getPChild().getRChild().setPChild(root.getPChild());            } else {//                3. root 是父节点的左子树,将root的唯一子树放到父节点的左子树上                root.getPChild().setLChild(null == root.getRChild() ? root.getLChild() : root.getRChild());                root.getPChild().getLChild().setPChild(root.getPChild());            }        } else {//            1. 如果删除的节点有两个子节点,则寻找root节点的前驱节点的值替换root节点的值,然后删除前驱节点            BSTTree newRoot = searchPrecursor(root.getLChild());            Integer newRootValue = newRoot.getValue();            deleteTree(root, newRootValue);            root.setValue(newRootValue);        }    }    private static BSTTree searchPrecursor(BSTTree root) {        if (null == root.getRChild()) {            return root;        } else {            return searchPrecursor(root.getRChild());        }    }    public Integer getValue() {        return value;    }    public void setValue(Integer value) {        this.value = value;    }    public BSTTree getLChild() {        return LChild;    }    public void setLChild(BSTTree LChild) {        this.LChild = LChild;    }    public void setLChild(Integer value) {        this.LChild = new BSTTree(value);    }    public BSTTree getRChild() {        return RChild;    }    public void setRChild(BSTTree RChild) {        this.RChild = RChild;    }    public void setRChild(Integer value) {        this.RChild = new BSTTree(value);    }    public BSTTree getPChild() {        return PChild;    }    public void setPChild(BSTTree PChild) {        this.PChild = PChild;    }    @Override    public String toString() {        return "BSTTree{" +                "value=" + value +                '}';    }    public static void putTree(BSTTree root, int[] angles) {        if (null != root) {            for (int angle : angles) {                addTree(root, angle);            }        }    }}

    Class : 

package lime.tree;/** * @Author: Lime * @Description: * @Date:Create in 19:25 2017/10/28 */public class BSTTreeTt {    public static void main(String[] args){        BSTTree root = new BSTTree(13);        int[] angles = {8,17,1,11,15,25,6,22,27,26};        BSTTree.putTree(root,angles);        showTree(root);//        for(int i = 0;i < 10;i++){//            BSTTree.addTree(root,(int)(Math.random() * 100));//        }//        showTree(root);//        int elf = (int)(Math.random() * 100);//        System.out.println("search " + elf + " : " + BSTTree.searchTree(root,elf));        BSTTree.deleteTree(root,11);        showTree(root);//        BSTTree.addTree(root,11);        BSTTree.deleteTree(root,1);        showTree(root);//        BSTTree.addTree(root,1);        BSTTree.deleteTree(root,27);        showTree(root);//        BSTTree.addTree(root,27);        BSTTree.deleteTree(root,17);        showTree(root);//        BSTTree.addTree(root,17);        BSTTree.deleteTree(root,13);        showTree(root);    }    public static void showTree(BSTTree root){        BSTTree.showTree(root);        System.out.println();    }}

啦啦啦

转载地址:http://eylpa.baihongyu.com/

你可能感兴趣的文章
validate表单验证及自定义方法
查看>>
知识点002-yum的配置文件
查看>>
学习 Git(使用手册)
查看>>
javascript 中出现missing ) after argument list的错误
查看>>
RSA 加密解密
查看>>
Cause: org.apache.ibatis.ognl.ExpressionSyntaxException: Malformed OGNL expression:......
查看>>
路由模式 - direct
查看>>
form表单的target属性
查看>>
mysql的常用引擎
查看>>
Linux基础(day40)
查看>>
第二个Java应用和Tomcat的管理功能
查看>>
10.28 rsync工具介绍 10.29/10.30 rsync常用选项 10.31 rsync通过ssh同步
查看>>
使用Layer弹窗时遇到Layer.Close()后dom元素延迟性销毁的问题 @Gyb
查看>>
LVS DR +keepalived配置
查看>>
安装redis.msi 及启动命令
查看>>
k8s集群部署四(部署Flannel网络)
查看>>
C4C和Outlook的集成
查看>>
人脸检测,人脸识别,机器学习库Dlib在VS2015上的详细安装教程,示例运行
查看>>
数组——冒泡排序算法
查看>>
微信H5支付坑一--手续费未结算
查看>>