【愚公系列】2021年11月 C#版 数据结构与算法解析(树查找)

简介: 【愚公系列】2021年11月 C#版 数据结构与算法解析(树查找)

二叉排序树或者是一棵空树,或者是具有下列性质的二叉树:


若左子树不空,则左子树上所有结点的值均小于或等于它的根结点的值;

若右子树不空,则右子树上所有结点的值均大于或等于它的根结点的值;

左、右子树也分别为二叉排序树。

二叉树查找需要先生成一个二叉排序树,再遍历所有节点逐一比较其值与关键字是否相同,相同则返回;若一直找不到,则返回-1。


示例:

public class BSTNode {

 

   public int Key { get; set; }

 

   public int Index { get; set; }

 

   public BSTNode Left { get; set; }

 

   public BSTNode Right { get; set; }

 

   public BSTNode(int key, int index) {

       Key = key;

       Index = index;

   }

 

   public void Insert(int key, int index) {

       var tree = new BSTNode(key, index);

       if (tree.Key <= Key) {

           if (Left == null) {

               Left = tree;

           }

           else {

               Left.Insert(key, index);

           }

       }

       else {

           if (Right == null) {

               Right = tree;

           }

           else {

               Right.Insert(key, index);

           }

       }

   }

 

   public int Search(int key) {

       //找左子节点

       var left = Left?.Search(key);

       if (left.HasValue && left.Value != -1) return left.Value;

       //找当前节点

       if (Key == key) return Index;

       //找右子节点

       var right = Right?.Search(key);

       if (right.HasValue && right.Value != -1) return right.Value;

       //找不到时返回-1

       return -1;

   }

 

}

public class Program {

 

   public static void Main(string[] args) {

       int[] array = { 43, 69, 11, 72, 28, 21, 56, 80, 48, 94, 32, 8 };

 

       Console.WriteLine(BinaryTreeSearch(array));

 

       Console.ReadKey();

   }

 

   public static int BinaryTreeSearch(int[] array) {

       var bstNode = new BSTNode(array[0], 0);

       for (int i = 1; i < array.Length; i++) {

           bstNode.Insert(array[i], i);

       }

       return bstNode.Search(80);

   }

 

}

在最坏的情况下二叉树查找的时间复杂度为:O(n) ,在平均情况下的时间复杂度为: O(logn) 。

相关文章
|
23天前
|
机器学习/深度学习 算法 搜索推荐
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
Machine Learning机器学习之决策树算法 Decision Tree(附Python代码)
|
28天前
|
存储 NoSQL 算法
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)(二)
【Redis技术进阶之路】「底层源码解析」揭秘高效存储模型与数据结构底层实现(字典)
45 0
|
1天前
|
存储 NoSQL Redis
Redis入门到通关之数据结构解析-SkipList
Redis入门到通关之数据结构解析-SkipList
|
1天前
|
存储 NoSQL 安全
Redis入门到通关之数据结构解析-动态字符串SDS
Redis入门到通关之数据结构解析-动态字符串SDS
|
1天前
|
存储 NoSQL Java
Redis入门到通关之数据结构解析-Dict
Redis入门到通关之数据结构解析-Dict
|
1天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
2天前
|
机器学习/深度学习 算法 数据挖掘
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
R语言逻辑回归、Naive Bayes贝叶斯、决策树、随机森林算法预测心脏病
|
8天前
|
机器学习/深度学习 算法 数据可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
样条曲线、决策树、Adaboost、梯度提升(GBM)算法进行回归、分类和动态可视化
13 0
|
9天前
|
算法 DataX
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
二叉树(中)+Leetcode每日一题——“数据结构与算法”“剑指Offer55-I. 二叉树的深度”“100.相同的树”“965.单值二叉树”
|
18天前
|
存储 缓存 算法
深度解析JVM世界:垃圾判断和垃圾回收算法
深度解析JVM世界:垃圾判断和垃圾回收算法

推荐镜像

更多