1.基本概念
二叉查找树也叫二叉排序树,二叉查找树若不是一颗空树,则其具有以下性质
1)若其左子树不为空,则左子树上的结点值均小于该节点
2)若其右子树不为空,则右子树上的结点值均大于该结点
3)左右子树均为二叉查找树
2.存储结构
二叉树的存储结构为二叉链表
3.查找算法
1)步骤:
若结点的关键字值等于查找的关键字,成功。
否则,若小于结点的关键字值,递归查找左子树。
若大于结点的关键字值,递归查找右子树。
若子树为空,查找不成功。
2)实现:
/// <summary>
/// 二叉查找树/二叉排序树
/// 排序二叉树的定义:它或者是一个空树,或者是具有以下性质的二叉树
/// 1.如果它的左子树不为空,则上面的值均小于该结点的值
/// 2.如果它的右子树不为空,则上面的值均大于该结点的值
/// 3.该结点的左子树和右子树均为二叉排序树
/// </summary>
public class BinarySortTree<T>
{
public void BinarySearch(Node<T> node,T value)
{
//该树为一颗空树
if (node == null)
{
Console.WriteLine("未找到该节点");
return;
}
//如果头结点的值=该值
if (node.value.Equals(value))
{
Console.WriteLine("找到该结点:" + node.value.ToString());
}
else if (Comparer<T>.Default.Compare(node.value, value) > 0)
{
//该值小于结点值,遍历左子树
BinarySearch(node.leftChild, value);
}
else
{
//该值大于结点值,遍历右子树
BinarySearch(node.rightChild, value);
}
}
}
/// <summary>
/// 存放二叉树的结点
/// </summary>
/// <typeparam name="T"></typeparam>
public class Node<T>
{
public T value { get; set; }
public Node<T> leftChild { get; set; }
public Node<T> rightChild { get; set; }
}