pat 1102(patients)

网友投稿 264 2022-09-21


pat 1102(patients)

1.源代码 #include #include #define maxn 100 using namespace std; struct Node{ int left,right; int root_flag = 1 ;//根标志 }; int num;//结点总数 Node node[maxn];//二叉树节点 vector result;//存储遍历结果 //从字符转换成数字 int charToNum(char a,int i){ if(a == '-'){ return -1;//没有孩子结点 } else{ node[a-'0'].root_flag = 0; return a-'0'; } } //找到根节点 int findRoot(){ for(int i = 0;i < num;i++){ if(node[i].root_flag != 0){ return i; } } } //层次遍历 -->从根开始 void level(int root){ int left,right; int count = 0; queue qu;//新建队列 qu.push(root); while(!qu.empty()){//队列非空 if(count!=num-1) printf("%d ",qu.front());//输出队首 else printf("%d",qu.front()); count++; right = node[qu.front()].right; left = node[qu.front()].left; if(right!=-1) qu.push(right); if(left!=-1) qu.push(left); qu.pop();//出队 } printf("\n"); } //中序遍历 void inOrder(int root){ if(node[root].left!=-1) inOrder(node[root].left); result.push_back(root);//保存到result中 if(node[root].right!=-1) inOrder(node[root].right); } int main(){ scanf("%d",&num);//总结点数 getchar(); int i ; char a,b; for(i = 0;i< num;i++){//输入数据 scanf("%c %c",&a,&b); getchar(); node[i].left = charToNum(a,i); node[i].right = charToNum(b,i); } int root = findRoot(); level(root); inOrder(root); for(i = result.size()-1;i >=0 ;i--){ if(i!=0) printf("%d ",result[i]); else printf("%d",result[i]); } } /* 8 1 - - - 0 - 2 7 - - - - 5 - 4 6 2 注: 1.要学会从输入数据时就开始处理数据。比如本题找根节点 2.本题其实不用真实的旋转,对于该树直接层次遍历,中序遍历,最后倒着输出即可。 */


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:pat 1103(pattern)
下一篇:pat 1061(patekphilippe手表)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~