C#实现二叉排序树定义、插入、构造

本文讲解C#实现二叉排序树定义、插入、构造
二叉排序树(Binary Sort Tree),又称二叉查找树(Binary Search Tree),亦称二叉搜索树。是数据结构中的一类。在一般情况下,查询效率比链表结构要高。
步骤:若根结点的关键字值等于查找的关键字,成功。
否则,若小于根结点的关键字值,递归查左子树。
若大于根结点的关键字值,递归查右子树。
若子树为空,查找不成功。
平均情况分析(在成功查找两种的情况下):
在一般情况下,设 P(n,i)为它的左子树的结点个数为 i 时的平均查找长度。结点个数为 n = 6 且 i = 3; 则 P(n,i)= P(6, 3) = [ 1+ ( P(3) + 1) * 3 + ( P(2) + 1) * 2 ] / 6= [ 1+ ( 5/3 + 1) * 3 + ( 3/2 + 1) * 2 ] / 6
注意:这里 P(3)、P(2) 是具有 3 个结点、2 个结点的二叉分类树的平均查找长度。 在一般情况,P(i)为具有 i 个结点二叉分类树的平均查找长度。平均查找长度= 每个结点的深度的总和 / 总结点数
(二叉树图中应为左子树P(3),右子树P(2))
P(3) = (1+2+2)/ 3 = 5/3
P(2) = (1+2)/ 2 = 3/2∴ P(n,i)= [ 1+ ( P(i) + 1) * i + ( P(n-i-1) + 1) * (n-i-1) ] / n
∴ P(n)= P(n,i)/ n <= 2(1+I/n)lnn
因为 2(1+I/n)lnn≈1.38logn 故P(n)=O(logn)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace 二叉排序树结构
{
class Program
{
static void Main(string[] args)
{
}
///
/// 二叉排序树的非递归查找算法
///
///
///
///
///
static BSTNode BST_Search(BSTNode T,int key ,ref BSTNode p) {
p = null;
while (T!=null&&key!=T.data) {
p = T;
if (key < T.data) { T = T.lchild; }
else {
T = T.rchild;
}
}
return T;
}
///
/// 二叉排序树的插入操作
///
///
///
///
static bool BST_Insert(ref BSTNode T,int key) {
if (Tnull) {
T = new BSTNode();
T.data = key;
T.lchild = T.rchild = null;
return true;
}
if (T.data
key) { return false; }
if (T.data>key) { return BST_Insert(ref T.lchild,key); }
else { return BST_Insert(ref T.rchild, key); }
}
///
/// 二叉排序树的构造
///
///
///
///
static void Creat_BST(ref BSTNode T,int[] str,int n) {
T = null;
int i = 0;
bool ggg;
while (i<n) {
BST_Insert(ref T,str[i]);
i++;}}}
///
/// 二叉树结构定义
///
public class BSTNode{
public BSTNode() { }
public int data;
public BSTNode lchild;
public BSTNode rchild;
}

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

光怪陆离的节日

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值