其他分享
首页 > 其他分享> > 数据结构学习小记-树

数据结构学习小记-树

作者:互联网

1.一种非线性结构,属于图均属于非线性结构。

  1. 树是由结点或顶点和边组成的,不存在任何环的结构,没有结点的树称为空,null,一棵非空的树包括一个根节点,还有很多附加结点,所有结点构成一个多级分层结构。

  2. 树的定义:n个节点组成的有限集合。n=0,空树;n>0,1个根节点,m个互不相交的有限集,每个子集为根的子树。

  3. 节点的度:树中某个节点的子树的个数;树的度:树中各节点的度的最大值;分支节点:度不为零的节点;叶子节点:度为0的节点;路径:i>j;路径长度;路径经过节点数目减一;孩子节点:某节点的后继结点;双亲节点:该节点为其孩子节点的双亲节点(父母节点);兄弟节点:同一双亲的孩子节点;子孙节点:某节点所有子树中的节点;祖先节点:从树节点到该节点的路径上的节点;

  4. 节点的层次:根节点为第一层(以此类推);树的高度;树中节点的最大层次;有序树:树中节点子树按次序从左向右安排,次序不能改变;无序树;与之相反;森林:互不相交的树的集合。

  5. 树的性质:树的节点树为所有节点度数加1(加根节点);度为m的树中第i层最多有m(i-1)个节点;高度为h的m次树至多有(mh-1)/(m-1)个节点;具有n个节点的m次树的最小高度为logm(n(m-1)+1)向上取整。

二叉树

  1. 二叉树是n个节点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根节点和两棵互不相交的、分别称为根节点的左子树和右子树组成。每一个节点最多拥有一个左节点和一个右节点,并没有多余的节点;

  2. 二叉树的特点:每个节点最多有两棵子树,所以二叉树中不存在度大于2的节点。左子树和右子树是有顺序的,次序不能任意点颠倒;即使树中某节点只有一棵子树,也要区分是左子树还是右子树;

  3. 性质:二叉树的第i层上的节点数目最多为2(i-1)个节点;深度为k的二叉树至多有2k -1 个节点;包含n个节点的二叉树的高度至少为log2(n+1);在任意一棵二叉树中,若终端节点的个数为n0,度为2的节点树为n2,则n0 = n2+1;

几种特殊的二叉树

  1. 斜树:

    • 所有的节点都只有左子树的二叉树叫左斜树。所有节点都是只有右子树的二叉树叫右斜树。统称为斜树。
  2. 满二叉树:

    • 在一棵二叉树中,如果所有分支节点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。所有叶子只能出现在最下一层。出现在其他层就不可能达成平衡;非叶子节点的度一定是2;在同样深度的二叉树中,满二叉树的节点个数最多,叶子树最多;
  3. 完全二叉树:

    • 对一颗具有n个节点的二叉树按层编号,如果编号为i(1<=i<=n)的节点与同样深度的满二叉树中编号为i的节点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。

二叉树的存储

  1. 一颗二叉树的结点设计一定要有如下内容:

    • 结点元素,data域,用来存储数据,其可以是int,char等基本的类型,同时也可以是struct等这些复杂的复合数据类型。

    • 左孩子结点,left指针,总是用来指向当前结点的下一层的左边结点,其属于一种指针。

    • 右孩子结点,right指针,总是用来指向当前结点的下一层的右边结点,其属于一种指针。

    • 父结点(可选),parent指针,总是指向当前结点的前一个结点,简称父亲结点,其不属于必须结点设计,省略掉可以节省内存的效果,而使用则可以更方便进行定向搜索,以上就是一颗二叉树的结点设计,除此之外,我们使用一棵树的时候需要建立一颗树根,由这个“根”,来进行逐步的向下构建。

    typedef struct node{
    	int data;
    	struct node* left;
    	struct node* right;
    } Node;
    
    //树根
    typedef struct {
    	Node* root;
    } Tree;
    
  2. 树的创建:

    • 首先,我们创建一个空的结点再进行连接,首先将这个空的结点中的data域赋予数据,再判断tree中是否是一个空树,如果为空,只需要将整个根指向这一个结点即可,如果不为空,再进行两个判断.
  3. 树的遍历之先序遍历二叉树:

    • 树作为非线性数据结构,在我们取出数据时就需要设计遍历,所谓遍历,就是按照一定的规则性,将数据结构中的所有数据全部依次访问,而二叉树本身并不具有天然的全局次序,故为实现遍历,需通过在各节点与其孩子之间约定某种局部次序,间接地定义某种全局次序,这便是我们常规定的先序,中序,后序遍历。

    先序遍历:根左右

    中序遍历:左根右

    后序遍历:左右根

标签:结点,遍历,右子,学习,子树,二叉树,数据结构,节点,小记
来源: https://www.cnblogs.com/rongyang2021/p/16268459.html