03-树3 Tree Traversals Again
2015-09-22 17:18
381 查看
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXSIZE 30 typedef struct node{ int top; int cap; int data[MAXSIZE]; } Stack; int preOrder[MAXSIZE]; int inOrder[MAXSIZE]; int postOrder[MAXSIZE]; Stack* CreateStack(); void Push(Stack *PtrS, int e); void Pop(Stack *PtrS); int Top(Stack *PtrS); void Solve(int prel, int inl, int postl, int n); int main(int argc, char const *argv[]) { for (int i = 0; i < MAXSIZE; ++i){ preOrder[i] = 0; inOrder[i] = 0; postOrder[i] = 0; } // freopen("test.txt", "r", stdin); int NodeNum, data; scanf("%d", &NodeNum); int perIndex = 0, inIndex = 0, postIndex = 0; Stack *PS = CreateStack(); Push(PS, 0); char str[20]; for (int i = 0; i < 2 * NodeNum; ++i){ scanf("%s", str); if(strcmp(str, "Push") == 0){ scanf("%d", &data); preOrder[perIndex++] = data; Push(PS, data); } else if(strcmp(str, "Pop") == 0){ inOrder[inIndex++] = Top(PS); Pop(PS); } } Solve(0, 0, 0, NodeNum); for (int i = 0; i < NodeNum; ++i){ if(i == NodeNum - 1) printf("%d", postOrder[i]); else printf("%d ", postOrder[i]); } return 0; } Stack* CreateStack() { Stack *PtrS = (Stack*)malloc(sizeof(Stack)); PtrS->cap = MAXSIZE; PtrS->top = -1; return PtrS; } void Push(Stack *PtrS, int e) { if(PtrS->top == PtrS->cap - 1) return; PtrS->top++; PtrS->data[PtrS->top] = e; } int Top(Stack *PtrS) { if(PtrS->top != -1) return PtrS->data[PtrS->top]; } void Pop(Stack *PtrS) { if(PtrS->top == -1) return; PtrS->top--; } void Solve(int prel, int inl, int postl, int n) { if(n == 0) return; if(n == 1){ postOrder[postl + n -1] = preOrder[prel]; return; } int L, R, root; root = preOrder[prel]; postOrder[postl + n -1] = root; for (int i = 0; i < n; ++i){ if(inOrder[inl + i] == root){ L = i;//左子树结点个数 R = n - i -1;//右子树结点个数 break; } } Solve(prel+1, inl, postl, L); Solve(prel+L+1, inl+L+1, postl+L, R); }
相关文章推荐
- NSSearchPathForDirectoriesInDomains用法
- _exit和exit的区别 http://www.cnblogs.com/hnrainll/archive/2011/08/17/2142001.html
- wait和waitpid函数
- 微博情感分析的表情符号平滑语言模型(A11, AAAI2012)
- Failed to load resource: net::ERR_INCOMPLETE_CHUNKED_ENCODING
- rhel6安装aircrack-ng
- Unity 3D 使用TerrainCompose 调用RTP 报错:
- weglogic Error 503--Service Unavailable
- [置顶] linux中fork()函数详解 ) http://blog.csdn.net/jason314/article/details/5640969
- 解决svn Authorization failed错误
- Container With Most Water
- ORA-00054: 资源正忙, 但指定以 NOWAIT 方式获取资源, 或者超时失效
- 杭电1023Train Problem II
- exit和return的区别 http://blog.csdn.net/firefly_2002/article/details/7960595
- STM32用JLINK 烧写程序时出现NO Cortex-m device found in JTAG chain现象和解决方案
- 没有main函数生成可执行程序的几种方法 http://www.linuxidc.com/Linux/2013-09/90061.htm
- 升级Xcode7&iOS9后,出现NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -980)
- 磁盘RAID总结
- 文件显示命令:cat、more、less、tail、touch详解
- Lightoj 1138 Trailing Zeroes (III) 【二分】