二叉树和树.ppt

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
二叉树和树.ppt

2、中序遍历算法的非递归描述 (1)需要设计一个栈S来存放所经过的根结点的指针; (2)对中序遍历来说,第一次遇到根结点并不访问,而是入栈,然后中根遍历左子树,左子树遍历结束后,第二次遇到根结点,就将根结点(指针)退栈,并且访问根结点,随后中序遍历右子树,在需要退栈时,若栈空则结束。 算法如下: 利用栈的原理直接实现栈的入栈\出栈操作 void inorder(BiTree root ) {int top=-1;BiTree p=root;BiTree s[20]; while(p!=NULL||top!=-1) { while(p!=NULL){ top++; s[top]=p; p=p-lchild; } p=s[top]; top--; visit(p); p=p-rchild; } } 1、层序遍历建立二叉树 //下面creattree()函数是以层次顺序输入结点值和它按满二叉树编号的序号。另用一辅助指针数组q[20],q[i]存储结点i 的地址。通过结点编号i得它的双亲地址q[i/2] 。若i 为偶数即知它是其双亲的左孩子,否则它是双亲的右孩子。   2。输出树T中从根到所有叶子结点的路径 void OutPath( CSTree T,Stack S ) { while ( T ) { Push(S, T-data ); // 将当层访问的结点记入路径 if ( !T-firstchild ) StackTraverse(S); // 输出从栈底到栈顶的一条路径 else OutPath( T-firstchild ,S); // 继续遍历左子树 Pop(S, e); // 将当层访问的结点从路径中退出 T = T-nextsibling; // 继续遍历右子树求其它叶子结点路径 } // while } // OutPath void OutPath( CSTree T,TElemType S[],int top) { while (T) { S[++top]=T-data; // 将当层访问的结点记入路径 if (!T-firstchild) for(int i=0;i=top;i++)coutS[i] ; coutendl; } // 输出从栈底到栈顶的一条路径 else OutPath( T-firstchild ,S,top); // 继续遍历左子树 S[top--]; // 将当层访问的结点从路径中退出 T = T-nextsibling; // 继续遍历右子树求其它叶子结点路径 } // while } // OutPath void OutPath1( CSTree T) { TElemType S[20];int top =-1; OutPath(T,S,top);} 输出某子树T中从所有叶子结点到根的路径,中国区教育站点(edu域)的所有www域名 在此例中T指向cn域下的edu结 点。 void OutPath( CSTree T,Stack S ) { while ( T ) { Push(S, T-data ); // 将当层访问的结点记入路径 if ( !T-firstchild T-data==www) TraverseStack (S); // 输出从栈顶到栈底的一条路径,并在输出的栈元素之间加. else OutPath( T-firstchild ,S); // 继续遍历左子树 Pop(S, e); // 将当层访问的结点从路径中退出 T = T-nextsibling; // 继续遍历右子树求其它路径

文档评论(0)

000 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档