第6章 树和二叉树【荐】.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第6章 树和二叉树【荐】.ppt

第6章 树和二叉树 6.1 树的有关概念 6.2 特殊的树—— 二叉树 6.3 树的表示 6.4 树的遍历 6.5 森林的二叉树表示和遍历 6.1 树的有关概念 6.1.1 树的定义 树是一个由结点以及结点之间的关系构成的集合。对于这个集合: (1)如果n=0,则这棵树称为空树; (2)如果n0,则有一个特定的结点称为根结点(root),它只有直接后继结点,没有直接前驱结点; (3)当n0时,除根结点以外的其他结点划分为m(m≥0)个不相交的有限集合T0、T1、…、Tm-1,每个集合又是一棵树,称为根的子树(SubTree)。每棵树的根结点有且只有一个直接前驱,可以有任意多个直接后继。 (4)单个结点是一棵树,树根就是该结点本身。 6.1.2 树的相关术语 一个结点的儿子结点的个数称为该结点的度。一棵树的度是指该树中结点的最大度数。 树中度为零的结点称为叶结点或终端结点。 树中度不为零的结点称为分支结点或非终端结点。除根结点外的分支结点统称为内部结点。 树中一个结点的高度是指从该结点到作为它的子孙的各叶结点的最长路径的长度。树的高度是指根结点的高度。 从树根到任一结点n有惟一的一条路径,称这条路径的长度为结点n的深度。 设结点n的所有儿子按其从左到右的次序排列为n0, n1, ..., nk,则称n0是n的最左儿子,简称为左儿子,并称ni是ni-1的右邻兄弟,简称为右兄弟(i=1, 2, ..., k)。 6.1.3 树的抽象数据类型 树的最重要的作用之一是用以实现各种各样的抽象数据类型。 树的抽象数据类型。 template classT class Tree { public: Tree(); //构造函数 ~Tree(); //析构函数 int Empty(); //判断树是否为空 T Root(Tree tr); //返回树的根结点 T FirstChild(Tree tr); //返回根结点的第一个孩子结点 T FirstSibling(Tree tr); T Parent(int p); //返回结点的双亲结点 Tree InsertChild(Tree tr, int pos, T x); Tree DeleteChild(Tree tr, int pos, T x); T Search(Treetr, T x); private: TreeNode* tnode; NodeR }; 6.2 特殊的树—— 二叉树 6.2.1 二叉树的定义 二叉树是n(n=0)个结点的有限集合。这个集合或是空的,或是有一个根结点加上两棵分别称为左子树和右子树的,互不相交的二叉树组成。 二叉树逻辑上有五种形态 6.2.2 二叉树的性质 性质1:在二叉树中,第i层的结点树最多为2i个(i≥0)。 性质2:深度为k的二叉树的结点总数最多为 2k+1-1(k≥0)。 性质3:对任何一棵二叉树T,如果其终端结点数为n0,而其度为2的结点数为n2,则n0=n2+1。 性质4:对于一棵有n个结点的完全二叉树,其深度k满足: k=[log2 (n+1)]-1 性质5:如果有n个结点的完全二叉树按从上到下、同层从左到右的顺序给结点编号为1、2、…、n,则对任何一个结点i有(1≤i≤n)有以下命题成立: (1)如果i==1,则结点i为根结点。 (2)如果i1,则其双亲结点为。 (3)如果2* i=n,则其左孩子为2i;否则i无左孩子。 (4)如果2*i+1=n,则其右孩子为2i+1;否则i无右孩子。 6.2.3 二叉树的抽象数据类型 (1)Create(root,Left,Right,T):这是一个建树过程 (2)Break(root,Left,Right,T):这是建树过程的逆过程 (3)Parent(v,T):这是一个求父结点的函数 (4)Left_Child(v,T):这是一个求左儿子结点的函数。 (5)Right_Child(v,T):这是一个求右儿子结点的函数。 (6)Height(T):求二叉树T的高度。 (7)Size(T):求二叉树T的结点数目。 (8)PreOrder(T):前序遍历二叉树。 (9)InOrder(T):中序遍历二叉树。 (10)PostOrder(T):后序遍历二叉树。 (11)InsertNode(T,x):向二叉树中插入值为x的新结点。 (12)DeleteNode(T,x):从二叉树中删除值为x的结点。 (13)FindNode(T,x):在二叉树中查找值为x的结点。 6.2.4 二叉树的实现 1. 二叉树的顺序存储表示法 将二叉树的所有结点,按照一定的次序存

文档评论(0)

ucut + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档