数据结构第17讲--树的遍历与实现--2018.pptx

数据结构第17讲--树的遍历与实现--2018.pptx

  1. 1、本文档共47页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第5章 二叉树与树 第17讲:树的遍历与实现;回顾:哈夫曼树;回顾:哈夫曼树;例:已知一组权值 {2,3,5,7,11}, 构造哈夫曼树的过程:;回顾:堆;回顾:优先队列;5.5 树;5.5 树;树--基本概念; 结点的度:该结点的孩子个数; 树的度:树中结点度的最大值; 兄弟:有共同的父结点; 无序树:兄弟间无左右次序; 有序树:兄弟分左右; 长子:最左子结点; 次子:长子的右邻; 左、右兄弟; 结点的度:该结点的孩子个数; 树的度:树中结点度的最大值; 例:已知一棵度为3的树, 度为0的结点有n0个、度为3的结点有n3个, 则度为2的结点有______________个.; //设:树类型 Tree , 结点类型Node Tree consTree(Node p, Tree t1, …, Tree ti) //以p为根,t1, …, ti为子树,建树 int isNull(Tree t) //判空 Node root(Tree t) //返回树t的根结点 Node parent(Node p) //求p的父亲结点 Tree leftChild(Tree t) //求t的长子树 Tree rightSibling(Tree t) //求t的右邻兄弟树 ;树的遍历;树--深度优先遍历;树--先根遍历;// 先根遍历 -- 递归算法;树--非递归先根遍历;1) 置树根为当前结点p, 2) 当p≠Null, 访问p, p进栈, p=p的长子; 重复, 直到p==Null; 3) 若栈不空, p=栈顶的右兄弟, 栈顶退栈,返回2); 4) 若栈空且p==Null,结束。;void nPreOrder(Tree t); { Node p = root(t); Stack s = createEmptyStack(); while(p!=Null) { visit(p); push(s, p); p = leftChild(p); } if( !isEmptyStack(s) ) { p=top(s); p=rightSibling(p); pop(s); } }while( !isEmptyStack(s) || p!=Null) };先根序列: ;树--深度优先遍历;树--后根遍历;树--后根遍历; 后根遍历,非递归思想:;1) 置树根为当前结点p, 2) 当p≠Null, p进栈, p=p的长子; 重复, 直到p==Null; 3) 若栈不空,访问栈顶, p=栈顶的右兄弟, 栈顶退栈,返回2); 4) 若栈空且p==Null,结束。;例,后根中,x是y的子孙的充要条件: post(y) – desc(y) ≤post(x) <post(y);树--广度优先遍历;广度优先序列:;void levelOrder( Tree t) { Node p = root(t); Queue Q = createEmptyQueue(); enQueue(Q, p); while(!isEmptyQueue(Q)) p = frontQueue(Q); visit(p); deQueue(Q); p= leftChild(p); while(p != Null) { enQueue(Q, p); p= rightSibling(p);} } } ;5.6 树的实现;1.父亲数组表示法;1.父亲数组表示法;1.父亲数组表示法;1.父亲数组表示法;例,“父亲数组” 表示的树中(先根顺序), 求下标为p的结点的右兄弟。;例, “父亲数组” 表示的树中(先根顺序), 求下标为p的结点的长子。;5.6 树的实现;2.子表表示法;A;0;2.子表表示法;2.子表表示法;2.子表表示法;2.子表表示法;int parent_chitree(PChiTree t, int p) { int i; struct EdgeNode * v; for( i=0; i< t->n; i++) v= t->nodelist[i].children; while(v !

文档评论(0)

朋友你好 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档