1.基本概念
二叉查找树又称二叉排序树,特点是左子树全部小于根节点,右子树全部大于根节点
2.生成二叉排序树,插入节点,查找节点,删除节点
查找节点的思路:如果当前节点的值大于要查找节点的值,则与当前节点的左孩子比较,否则与右孩子比较,循环迭代
插入节点的思路:当前二叉排序树已存在该值的节点,插入失败,返回false,要插入的节点的值小于当前节点的值,则与当前节点的左孩子比较,否则与右孩子比较,循环迭代,直到当前节点左右孩子均为空,将该值的节点作为当前节点的左孩子或右孩子。
生成二叉排序树的思路:每次当作插入一个新节点
删除节点的思路:(这个很难,分三种情况)第一种是左右孩子均为空的情况,直接删除;第二种是只有左孩子或右孩子,删除该节点后还应当让其孩子指向其上一个节点;第三种是具有左右孩子的,这种可以采取一种策略,每次从其左子树中找到最大的一个节点,即其前驱,交换值,将其前驱删除,这个要考虑其左子树的根节点是否有右孩子的情况!
代码:
package datastructure.tree3;
import java.util.Scanner;
public class BinarySortTree {
public static class TreeNode{
int element;
TreeNode left;
TreeNode right;
public TreeNode(int val){
element=val;
left=null;
right=null;
}
}
public static TreeNode createBST(){
Scanner sc=new Scanner(System.in);
String line=sc.nextLine();
String[] array=line.split(" ");
TreeNode root=new TreeNode(Integer.parseInt(array[0]));
for(int i=1;i