C#实现二叉查找树的算法

简介

树是一种非线性结构。树的本质是将一些节点由边连接起来,形成层级的结构。而二叉树是一种特殊的树,使得树每个子节点必须小于等于2.而二叉查找树又是一类特殊的二叉树。使得每一个节点的左节点或左子树的所有节点必须小于这个节点,右节点必须大于这个节点。从而方便高效搜索。

下面来看如何使用C#实现二叉查找树。

实现节点

二叉查找树是节点的集合。因此首先要构建节点,如代码1所示。

//二叉查找树的节点定义publicclass Node
    {
        //节点本身的数据publicint data;
        //左孩子public Node left;
        //右孩子public Node right;
        publicvoid DisplayData()
        {
            Console.Write(data+"");
        }
    }

代码1.节点的定义

构建二叉树

构建二叉树是通过向二叉树插入元素得以实现的,所有小于根节点的节点插入根节点的左子树,大于根节点的,插入右子树。依此类推进行递归。直到找到位置进行插入。二叉查找树的构建过程其实就是节点的插入过程。C#实现代码如代码2所示。

publicvoid Insert(int data)
        {
            Node Parent;
            //将所需插入的数据包装进节点
            Node newNode=new Node();
            newNode.data=data;

            //如果为空树,则插入根节点if(rootNode==null)
            {
                rootNode=newNode;
            }
            //否则找到合适叶子节点位置插入else
            {
                Node Current = rootNode;
                while(true)
                {
                    Parent=Current;
                    if(newNode.data<Current.data)
                    {
                        Current=Current.left;
                        if(Current==null)
                        {
                            Parent.left=newNode;
                            //插入叶子后跳出循环break;
                        }
                    }
                    else
                    {
                        Current = Current.right;
                        if (Current == null)
                        {
                            Parent.right = newNode;
                            //插入叶子后跳出循环break;
                        }
                    }
                }
            }
        }

代码2.实现二叉树的插入

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c#
, 代码
, node
, 节点
, data
, 树节点
, c#节点
, 二叉查找树
, 二叉搜索树
, 查找节点
, 插入节点
, 必须
节点查找
c站、c语言、cf、ch、c罗,以便于您获取更多的相关知识。

时间: 2024-09-20 05:33:53

C#实现二叉查找树的算法的相关文章

排序算法系列之二叉查找树

排序算法系列之二叉查找树 基本概念   二叉查找树(Binary Search Tree),或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值: 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值: 它的左.右子树也分别为二叉排序树.                                             序列:1 3 4 6 7 8 10 13 14                 序列:2 3 4 6 7 9

浅谈算法和数据结构 七 二叉查找树

前文介绍了符号表的两种实现,无序链表和有序数组,无序链表在插入的时候具有较高的灵活性,而有序数组在查找时具有较高的效率,本文介绍的二叉查找树(Binary Search Tree,BST)这一数据结构综合了以上两种数据结构的优点. 二叉查找树具有很高的灵活性,对其优化可以生成平衡二叉树,红黑树等高效的查找和插入数据结构,后文会一一介绍. 一 定义 二叉查找树(Binary Search Tree),也称有序二叉树(ordered binary tree),排序二叉树(sorted binary

Ruby实现的最优二叉查找树算法

  这篇文章主要介绍了Ruby实现的最优二叉查找树算法,本文直接给出实现代码,需要的朋友可以参考下 算法导论上的伪码改写而成,加上导论的课后练习第一题的解的构造函数. 代码如下: #encoding: utf-8 =begin author: xu jin date: Nov 11, 2012 Optimal Binary Search Tree to find by using EditDistance algorithm refer to <> example output: "

[算法系列之六]二叉查找树

[简介] 二叉查找树是一种数据结构,它支持多种动态集合操作. 在二叉查找树上执行的基本操作的时间与树的高度成正比.对于一棵含有n个节点的完全二叉树,这些操作的最坏情况运行时间为O(n). [结构体] 一棵二叉查找树按二叉树结构来组织的. // 二叉查找树节点 struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode *parent; TreeNode(int x) : val(x), left(NULL), righ

【算法导论】动态规划之最优二叉查找树

        如果我们想写一个单词查询的软件的话,我们的目的就是让查询的总时间最短,我们首先想到用之前的二叉查找树.我们可以用红黑树或者其它的平衡二叉树来保证每个单词的搜索时间.但是每个单词出现的频率一般不同,因此我们希望把频率较大的单词放在离根比较近的地方,频率较小的放在离叶子较近的地方.而且,我们所要查询的单词词库中没有,这也值得考虑.                        由上文可知,ki表示单词,di表示不能查到的情况.由上面的例子可知,一棵最优二叉树不一定是高度最小的树.我们

Ruby实现的最优二叉查找树算法_ruby专题

算法导论上的伪码改写而成,加上导论的课后练习第一题的解的构造函数. 复制代码 代码如下: #encoding: utf-8 =begin author: xu jin date: Nov 11, 2012 Optimal Binary Search Tree to find by using EditDistance algorithm refer to <<introduction to algorithms>> example output: "k2 is the r

浅谈算法和数据结构 十 平衡查找树之B树

前面讲解了平衡查找树中的2-3树以及其实现红黑树.2-3树种,一个节点最多有2个key,而红黑树则使用染色的方式来标识这两个key. 维基百科对B树的定义为"在计算机科学中,B树(B-tree)是一种树状数据结构,它能够存储数据.对其进行排序并允许以O(log n)的时间复杂度运行进行查找.顺序读取.插入和删除的数据结构.B树,概括来说是一个节点可以拥有多于2个子节点的二叉查找树.与自平衡二叉查找树不同,B-树为系统最优化大块数据的读和写操作.B-tree算法减少定位记录时所经历的中间过程,从而

浅谈算法和数据结构 九 平衡查找树之红黑树

前面一篇文章介绍了2-3查找树,可以看到,2-3查找树能保证在插入元素之后能保持树的平衡状态,最坏情况下即所有的子节点都是2-node,树的高度为lgN,从而保证了最坏情况下的时间复杂度.但是2-3树实现起来比较复杂,本文介绍一种简单实现2-3树的数据结构,即红黑树(Red-Black Tree) 定义 红黑树的主要是像是对2-3查找树进行编码,尤其是对2-3查找树中的3-nodes节点添加额外的信息.红黑树中将节点之间的链接分为两种不同类型,红色链接,他用来链接两个2-nodes节点来表示一个

二叉树创建及遍历算法

//二叉树处理头文件 //包括二叉树的结构定义,二叉树的创建,遍历算法(递归及非递归), /* 作者:成晓旭 时间:2001年10月7日(18:49:38-20:00:00) 内容:完成二叉树创建,二叉树的前,中,后序遍历(递归) 时间:2001年10月7日(21:09:38-22:09:00) 内容:完成二叉树的前,中序遍历(非递归) 时间:2001年10月8日(10:09:38-11:29:00) 内容:完成查找二叉树的静,动态查找(非递归) */ #include "stdlib.h&qu