查找算法(二叉排序树)
Posted 胖头猫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找算法(二叉排序树)相关的知识,希望对你有一定的参考价值。
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); } }
以上是关于查找算法(二叉排序树)的主要内容,如果未能解决你的问题,请参考以下文章