首页 > 代码库 > 查找算法(二叉排序树)

查找算法(二叉排序树)

package com.tree.find;public class TestSearchBST {            private static class BiNode{        int data;        BiNode lchild;        BiNode rchild;            }        public static boolean hasBuild = false;    public static void createBiTree(BiNode head, int array[]){        head.data = array[0];        BiNode next;        for(int i=1;i<array.length;i++){            hasBuild = false;            next = new BiNode();            next.data = array[i];                        build(head,next);        }    }            public static void build(BiNode t, BiNode next){        if(t != null){                        if(t.data < next.data){                build(t.rchild, next);                if(!hasBuild){ // 设置一个标量,如果结点已经构建进树,之后就直接弹出,避免已经构建好的结点出现重复覆盖的现象                    t.rchild = next;                    hasBuild = true;                }            }else{                build(t.lchild,next);                if(!hasBuild){                    t.lchild = next;                    hasBuild = true;                }            }        }            }    public static void forEach(BiNode t){        if(t != null){            //中序遍历,可以从小到大排好序            forEach(t.lchild);            System.out.println(t.data);            forEach(t.rchild);        }            }        //查找    static boolean isFind = false;    static BiNode findedNode = null;    public static void searchBSF(BiNode t, int key){        if(t == null){            return;        }else if(key == t.data){            findedNode = t; // 把找到的结点赋值给findedNode            isFind = true;        }else if(key < t.data){            searchBSF(t.lchild,key);        }else{            searchBSF(t.rchild,key);        }    }        //插入    public static void insertBSF(BiNode t,int key){        searchBSF(t,key);        if(!isFind){//如果树中不存在这个数据,就插入            BiNode n = new BiNode();            n.data = key;            hasBuild = false; // 刚开始是没有构建入树的            build(t,n);                    }            }           public static void alert(BiNode t, int oldVal, int newVal){        searchBSF(t,oldVal);        if(isFind){            findedNode.data = newVal;                }            }    public static void main(String[] args) {        BiNode t = new BiNode();        int arr[] = new int[]{23,63,76,45,12,78,89,44};        createBiTree(t,arr);                //查找数据是否存在//        searchBSF(t,23);//        System.out.println(isFind);                //插入新数据//        forEach(t);//        insertBSF(t,50);//        forEach(t);        //        forEach(t);//        delete(t, 12);//        System.out.println();//        forEach(t);        //searchBSF(t,23);        //System.out.println(findedNode.data);        //System.out.println(isFind);                //修改操作//        forEach(t);//        alert(t, 23, 111);//        forEach(t);    }}

 

查找算法(二叉排序树)