1树的概念
(1)树是一种非线性的数据结构,它是由n(N>=0)个有限节点组成的一个具有层次关系的结合。
(2)边:从父节点到子节点的连线(边有方向)
(3)兄弟节点:父节点相同的节点互为兄弟节点(如上图中的2 3,4 5, 6 7等都是兄弟节点)。
(4)树叶、分支节点:没有子节点的节点称为树叶,树中的其余节点称为分支节点,分支节点可只有一个分支,(12 9 10 11 7都是叶节点)。
(5)祖先和子孙:基于父节点/子节点关系和传递性,可以确定相应的传递关系,称为祖先关系或子孙关系
(6)度数:一个节点的子节点个数称为该节点的度数。
(7)路径、路径长度: 从一个祖先节点到其子孙节点的一系列边称为树中一条路径(从一棵树的根到树中任一个节点都有唯一路径)。 路径中边的条数称为路径的长度,认为每个节点到自身有长0的路径
(8)节点的层数: 树根到节点的路径长度是该节点的层数 。(上图树的层数是5)
(9)节点都有层数,根所在的层为0。
(10)高度(或深度): 树的高度或深度是树中节点的最大层数(最长路径的长度)加1
空树高度为0,只有根节点的树高度为1。
2.数的表示方法:
实际中树的表示方法有很多方法。最常用的几种方法有:双亲表示法,孩子表示法,孩子兄弟表示法等。
3.树中我们最常用见到的还是二叉树,其次就是三叉树等,现在我们主要讨论一些关于二叉树的一些问题:
(1)关于二叉树的基本概念以及表示方法。
一颗二叉树是节点的一个集合,该集合或者为空,或者由一个根节点加上两颗(别称为)左子树和右子树的二叉树组成。
(2)二叉树的特点:
1.每个节点最多有两棵子树,即二叉树不存在度大于二的节点。
2.二叉树的子树有左右之分,其子树的次序不能颠倒。
4.关于二叉树其中还包括两种:(1)满二叉树:一个二叉树,如果每一层的节点数都达到最大值,则这个二叉树就是满二叉树。也就是说如果一个二叉树的层数为k,那么他的节点总数为(2k)-1;他的层节点个数为2(k-1);
(2)完全二叉树:完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为k的,有n个节点的二叉树,当且仅当其中每一个节点都与深度为k的满二叉树中编号从1至n的节点一一对应是称之为完全二叉树。满二叉树是一种特殊的完全二叉树。
5.接下来我们要谈一下二叉树的基本性质。
( 1).若规定只有根节点的二叉树的深度只有1,则深度为K的二叉树的最大根节点数是2^K-1(K>=0);
(2).对任一二叉树,如果其叶节点个数为n0;度为2的非叶节点个数为n2;则有n0=n2+1;
(3).具有n个节点的完全二叉树的深度K为log【2】(n+1)向上取整;
(4).对于具有n个节点的完全二叉树,如果按照从上至下从左至右的顺序对所有的节点从0进行编号,则对应序号为i的节点有:
【1】.若i>0,双亲序号:(i-1)/2;
i=0;i 为根节点编号无双亲节;
【2】.若2i+1<n;左孩子序号为2i+1;否则无左孩子;
【3】若2i+2<n;右孩子序号为2i+2;否则无右孩子;
6.二叉树的存储方式分为两种:一种是顺序存储方式,一种是链式存储方式。
(1)顺序存储方式就是用数组来存储,一般只适合表示完全二叉树,因为不是完全二叉树的话会有空间浪费。
(2)二叉树的链式存储结构是指,用链来表示一个二叉树,即用链来表示元素的逻辑关系。通常的方法是链表中每个节点由三个域组成。数据域和左右指针域,左右指针分别用来给出该节点的左孩子和右孩子所在连节点的存储地址。