数据结构之二叉树(C#版)

本文介绍了数据结构中的二叉树概念,包括人话版和猿话版解释,以及C#代码实现。详细阐述了二叉树的结构、遍历方法,如深度优先的先序、中序、后序遍历和广度优先遍历,并通过实例代码演示了遍历过程。
摘要由CSDN通过智能技术生成

什么是二叉树

数据结构里面的“二叉树”这种结构,听起来很高大上,但实际上,他也的确是高大上,那么什么是二叉树呢?

下面我再次用灵魂给你画一下,什么是二叉树。
二叉树的描述

人话版

可以看到,最顶端那个小伙伴最拽,为什么呢?因为他是老大(根节点),然后这位老大,左右手都提着一个小弟(左右子树),并不是每个老大左右手都能提着小弟的哦,有可能只提一个,也有可能两手空空,然后他的小弟呢,也跟他一样(如果小弟比老大能提的小弟多,那老大可能就打死这个小弟了),可能提着两个小弟,可能提着一个小弟,也可能这个小弟也是两手空空,那么如此反反复复就构成了一个二叉树。

题外话
一开始我画上面的图的时候,我将没有提小弟的那只手,是给他们砍掉的,但后面发现不对,小伙伴还是要双手都有,但提不提小弟,就看他自己咯,这里其实是对应于猿话版中的第二点

备注一下
图中红色的部分,其实在二叉树中并不存在,只是为了解释得更加生动,就把他画成比较像人(我也不敢说我画的是个人)

猿话版

1.首先二叉树是树;
2.二叉树每个元素都有只有两棵子树(左子树和右子树,其中一个或两个可以为空);
3.二叉树中每个元素子树都是有序的,分为左子树和右子树(这里的有序指的是左右的顺序)。

代码实现

树结构

//二叉树基类
public abstract class BinaryTreeBase<T>
{
   
        public abstract BinaryTreeNode<T> Root {
    get; }
}

//二叉树
public class BinaryTree<T> : BinaryTreeBase<T>
{
   
		//根节点
        private BinaryTreeNode<T> _root;
        
        public override BinaryTreeNode<T> Root {
    get {
    return _root; } }
        
        public BinaryTree(BinaryTreeNode<T> rootNode)
        {
   
            _root = rootNode;
        }

        public BinaryTree(T rootData)
        {
   
            _root = new BinaryTreeNode<T>(rootData);
        }
}

一棵二叉树的基本结构,可以参考上述代码,这里我为什么写了一个二叉树的基类,是为了我下一篇讲述二叉搜索树做准备的,因为代码写好了,也就懒得改了。

其实二叉树的结构,主要的就是保存一个根节点咯,其他类似计算二叉树的层数和元素个数,这里先暂时不提及了。

树节点

 public class BinaryTreeNode<T>
 {
   


        ///<summary>
        ///节点数据
        ///<summary>        
        private T _data;
        ///<summary>
        ///左节点
        ///<summary>
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值