首页 > 编程知识 正文

数据结构带权路径长度怎么求,拓扑排序求最长路径

时间:2023-05-06 04:41:53 阅读:160334 作者:4858

描述

使用二叉树的二叉树链表记忆结构进行记忆,需要输出从二叉树的根到指定节点的完整路径。 按照给定的顺序根据教材中的算法6.4所示的算法制作二叉树链表。 二叉树各节点的数据不同。

Input包含多个测试数据。 各组测试数据的第一行给出二叉树的第一个扫描序列(节点数至少为1个,100个以下),用于构建二叉树的链表中存储的二叉树。 第二行包含整数m,表示有m个节点需要输出从根节点到其自身的路径。 接着,第m行,每行一个字符c表示需要输出从根节点到自节点的路径。

Output针对每个数据集输出m行,每行具有从根节点到对应节点的路径。

示例输入ABC ^ ^ de ^ g ^ ^ f ^ ^ ^

3

A

d

G Sample Output A ABD ABDEG

分析:先做二叉树吧。 然后慢慢地找==。 从根节点长出粗头发,放入在一个容器vector中找的点,找到后输出还给你,找不到的话依次找左右的子树~

参考代码# include cstdio # includecstdlib # include cmath # include cstring # include string # include algorithm # include stack # include struct BiTNode *l; struct BiTNode *r; (}*BiTree,BiTreeNode; char ch; 布尔标志; voidcreatebitree(bitreet ) { char tmp; if(flag ) scanf ) ' %c ',tmp; else { tmp=ch; flag=true; }if(tmp=='^ ' ) T=NULL; else { T=new BiTreeNode; T-d=tmp; createbitree(t-L ); createbitree(t-r ); }voidfindpath(bitreet,char x,vectorint v ) if ) t==null ) return; v.push_back(t-d ); if(t-d==x ) { flag=1; for(intI=0; i v.size (; I ) Putchar(v[I]; Putchar(10; 返回; ) findpath(t-L,x,v ); findpath(t-r,x,v ); v.pop_back (; } int main () (while(~scanf )、ch ) ) if )=((n ) ) continue; BiTree T=NULL; flag=false; createbitree(t; int n; scanf('%d ',n ); char x; for(intI=1; i=n; I ) Scanf('%c ',x ); vectorint v; 查找路径(t,x,v ); //Putchar(10; } } return 0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。