叶子结点

八、树和二叉树

拜拜、爱过 提交于 2019-11-26 03:43:09
一、树的定义 树的定义  树是一种非线性的数据结构  树是由 n (n≥0) 个结点组成的有限集合   如果 n = 0,称为空树 ;   如果 n > 0,则 :    有一个特定的称之为根 (root) 的结点,它只有直接后继,但没有直接前驱    除根以外的其它结点划分为 m (m≥0) 个互不相交的有限集合T0, T1, …,Tm-1, 每个集合又是一棵树, 并且称之为根的子树(subTree) 树家族中的概念  树的结点包含一个数据及若干指向子树的分支  结点拥有的子树数称为结点的度   度为0的结点称为叶结点   度不为0的结点称为分支结点  树的度定义为所有结点中的度的最大值  结点的直接后继称为该结点的孩子   相应的,该结点称为孩子的双亲  结点的孩子的孩子的…… 称为该结点的子孙   相应的,该结点称为子孙的祖先  同一个双亲的孩子之间互称兄弟  结点的层次   根为第1层   根的孩子为第2层    ……  树中结点的最大层次称为树的深度或高度 如果树中结点的各子树从左向右是有次序的,子树间不能互换位置 ,则称该树为有序树 ,否则为无序树。 森林是由 n ( n≥0) 棵互不相交的树组成的集合 树的一些常用操作 创建树 销毁树 清空树 插入结点 删除结点 获取结点 获取根结点 获取树的结点数 获取树的高度 获取树的度 二、树的存储结构 树的存储结构

PTA 统计二叉树叶子结点个数

拜拜、爱过 提交于 2019-11-25 20:42:31
6-2 统计二叉树叶子结点个数 (10 分) 本题要求实现一个函数,可统计二叉树的叶子结点个数。 函数接口定义: int LeafCount ( BiTree T); T是二叉树树根指针,函数LeafCount返回二叉树中叶子结点个数,若树为空,则返回0。 裁判测试程序样例: #include <stdio.h> #include <stdlib.h> typedef char ElemType; typedef struct BiTNode { ElemType data; struct BiTNode *lchild,*rchild; }BiTNode,*BiTree; BiTree Create();/* 细节在此不表 */ int LeafCount ( BiTree T); int main() { BiTree T = Create(); printf("%d\n", LeafCount(T)); return 0; } /* 你的代码将被嵌在这里 */ 输出样例(对于图中给出的树): 3 int LeafCount ( BiTree T){ if(T==NULL) return 0; if(T->lchild==NULL&&T->rchild==NULL){ return 1; } else return LeafCount(T->lchild)+LeafCount

数据结构(十四)——二叉树

久未见 提交于 2019-11-25 20:25:28
数据结构(十四)——二叉树 一、二叉树简介 1、二叉树简介 二叉树是由n(n>=0)个结点组成的有序集合,集合或者为空,或者是由一个根节点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。 二叉树的五种形态: 2、二叉树的存储结构模型 树的另一种表示法:孩子兄弟表示法 A、每个结点都有一个指向其第一个孩子的指针 B、每个结点都有一个指向其第一个右兄弟的指针 孩子兄弟表示法的特性: A、能够表示任意的树形结构 B、每个结点包含一个数据成员和两个指针成员 C、孩子结点指针和兄弟结点指针构成树杈 3、满二叉树 如果二叉树中所有分支结点的度数都为2,并且叶子结点都在统一层次上,则二叉树为满二叉树。 4、完全二叉树 如果一棵具有n个结点的高度为k的二叉树,树的每个结点都与高度为k的满二叉树中编号为1——n的结点一一对应,则二叉树为完全二叉树。 完全二叉树的特性: A、同样结点数的二叉树,完全二叉树的高度最小 B、完全二叉树的叶子结点仅出现在最下边两层,并且最底层的叶子结点一定出现在左边,倒数第二层的叶子结点一定出现在右边。 C、完全二叉树中度为1的结点只有左孩子。 5、二叉树的特性 A、在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。 B、高度为k的二叉树,最多有2^k-1个结点(k>=0)。 C、对任何一棵二叉树,如果其叶结点有n个,度为2的非叶子结点有m个,则 n = m