C#数据结构二叉树的特点以及存储实现

C#数据结构二叉树的特点以及存储实现

1.二叉树的定义

二叉树是n个有限元素的集合,该集合为空或者由一个称为根的元素以及两个不相交的左子树和右子树的二叉树组成;当集合为空是称为空二叉树。在二叉树中,一个元素也称为一个结点
二叉树图

2.二叉树的相关术语

1.结点的度:结点所拥有的子树个数称为度。即该结点下方所连接的子结点个数。上图结点E的度为2,F的度为1,H的度为0。
2.叶结点:度为0的结点称为叶结点;也称为末端结点。H、D、G、I都是末端结点。
3.分支结点:度不为0的结点称为分支结点;也称为为末端结点。一棵树的结点除了叶结点外,其他都是分支结点。
4.孩子结点、兄弟结点、父结点:树中一个结点的子树的根结点称为这个结点的孩子。这个结点称为它孩子结点的父结点。具有同一个父结点称为兄弟结点。上图中E是G和H的父结点;G称为E的孩子结点;G、H两者称为兄弟结点。
5.路径、路径长度:树的访问只能按照顺序访问。父结点只能访问它的子结点,不可越级访问。从某一结点到另一结点的路称为路径。如上图从根结点A开始到G的路径为ACEG。这个路径的路径长度为3。从A到D的路径为ABD,路径长度为2。
6.结点的层数:从根结点开始定义。根结点的层数为1.根结点的子结点层数加一,以此类推。树中所有结点的最大层数为该树的深度。上图的树的深度为4。
7.树的度:树中各结点度的最大值为该树的度。二叉树的度为2。
8.完全二叉树:除了最后一层都是满的(即左右孩子结点都不为空),最后一层从左至右连续称为完全二叉树。下图就是一个完全二叉树。
完全二叉树
9.满二叉树:除最后一层以外所有结点的左右孩子结点都不为空。所有的满二叉树都是完全二叉树。但是完全二叉树不一定是满二叉树。如下图
满二叉树

二叉树的性质

1.一个非空二叉树的第i层上最多右2^(i-1)个结点。
2.一棵深度为k的二叉树中,最多具有2^k - 1个结点。
3.对于一个非空的二叉树。如果叶子节点树为m,度数为2的结点数为n,则有m = n+1。
4.具有n个结点的完全二叉树的深度k为【log 2 n】 +1。

二叉链表的结点结构

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Tree
{
   
    class Node<T>
    {
   
        #region    属性和构造方法
        private T data;  //本结点数据
        private Node<T> leftChild;    //结点的左孩子结点
        private Node<T> rightChild;   //结点的右孩子结点
        public Node(T data,Node<T> leftChild,Node<T> rightChild)
        {
   
            this.data = data;
            this.leftChild = leftChild;
            this.rightChild = rightChild;
        }
        public Node(T data, Node<T> leftChild)
        {
   
            this.data = data;
            this.leftChild = leftChild;
            this.rightChild = null;
        }
        public Node(Node<T> leftChild, Node<T> rightChild
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值