二叉查找树
2013-05-02 12:20
190 查看
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; }
}
二叉查找树也叫二叉排序树,二叉查找树若不是一颗空树,则其具有以下性质
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; }
}
相关文章推荐
- 动态规划——最优二叉查找树
- 构造最优二叉查找树的时间复杂度分析
- 算法导论 ch15 动态规划 最优二叉查找树
- 动态规划--最优二叉查找树
- AVL二叉查找树
- 用DSW算法一次性平衡二叉查找树
- 《算法导论》学习总结——第三部分3二叉查找树
- 二叉查找树的模板类实现(二)
- 二叉排序树(二叉查找树)
- 二叉查找树(BST)
- 基于二叉查找树的集合
- 《算法导论》第12章 二叉查找树 (3)基数树
- 二叉查找树(二叉排序树)的详细实现C版
- 二叉查找树(一)
- 【NOI2009】 二叉查找树
- 二叉查找树 算法导论笔记
- 二叉查找树
- 程序员面试100题(算法)之把二叉查找树转变成排序的双向链表(含二叉树前序创建、递归)
- 最优二叉查找树(动态规划)
- 【面试题精选】1-构造一个二叉查找树-C++实现