二叉搜索树需满足以下四个条件:
若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
任意节点的左、右子树也分别为二叉查找树;
没有键值相等的节点。
二叉搜索树的特点:
1、中序遍历一定是从小到大排列
总体思路:先访问根,比根小访问左结点,比根大访问右节点
public class searchTree {
TreeNode root;
//初始化建立
public void searchTree(int val){
root = new TreeNode(val);
}
//插入
void insert(int val)
{
TreeNode new_node = new TreeNode(val);
//如果该树是空树
if(root==null)
{
root = new_node;
return;
}
//该树不为空树
TreeNode node = root;
while(true)
{
//如果和节点值相等,不能插入
if(val==node.val)
return ;
//如果比右节点值大
else if(val>node.val)
{
if(node.right==null)
{
node.right = new_node;
return;
}
else
node = node.right;
}
//如果比左节点值小
else
{
if(node.left==null)
{
node.left = new_node;
return;
}
else
node = node.left;
}
}
}
//查找,可以变成修改
TreeNode search(int val)
{
TreeNode node = root;
while(node!=null)
{
if(val==node.val)
return node;
else if(val>node.val)
{
node = node.right;
}
else
node = node.left;
}
//不存在就返回空
return node;
}
//删除,返回删除的值
//遍历(中序)
void print(TreeNode root)
{
if(root==null) return;
print(root.left);
System.out.println(root.val);
print(root.right);
}
}