PAT甲级1119,1086,1020总结
来源:互联网 发布:淘宝卖家怎么清洗订单 编辑:程序博客网 时间:2024/05/24 05:58
1086已知中序先序求后序
#include<iostream>#include<queue>#include<stack>#include<string>#include<string.h>#include<cstring>using namespace std;int pre[30];int ino[30];int flag = 1;struct TreeNode{ int data; TreeNode* lefttree; TreeNode* righttree;};TreeNode *createTree(int pl, int pr, int il, int ir){ if (pl > pr) return NULL; int i = 0; for (i = il; ino[i] != pre[pl]; i++); TreeNode *tree = (TreeNode*)malloc(sizeof(TreeNode)); tree->data = pre[pl]; tree->lefttree = createTree(pl + 1, pl + i - il, il, i - 1); tree->righttree = createTree(pl + i - il + 1, pr, i + 1, ir); if (flag == 1) { printf("%d", tree->data); flag = 2; } else { printf(" %d", tree->data); } return tree;}int main(){ int n, i = 0, j = 0;; stack<int> s; char str[4]; scanf("%d", &n); scanf("%s %d", &str, &pre[i]); s.push(pre[0]); i++; while (j < n) { scanf("%s", &str); if (string(str) == "Push") { scanf("%d", &pre[i]); s.push(pre[i]); i++; } else if (string(str) == "Pop") { ino[j] = s.top(); s.pop(); j++; } } TreeNode *root = createTree(0, n - 1, 0, n - 1); return 0;}
1020已知中序后序求先序
#include<iostream>#include<queue>using namespace std;int pos[30];int ino[30];struct TreeNode{ int data; TreeNode* lefttree; TreeNode* righttree;};TreeNode *createTree(int pl,int pr,int il,int ir){ if (pl > pr) return NULL; TreeNode* tree; int i = 0; for (i = il; i < ir, pos[pr] != ino[i]; i++); tree = (TreeNode*)malloc(sizeof(TreeNode)); tree->data = pos[pr]; tree->lefttree = createTree(pl, pl + i - 1 - il, il, i - 1); tree->righttree = createTree(pl + i - il, pr - 1, i + 1, ir); return tree;}int main(){ int n; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &pos[i]); } for (int i = 0; i < n; i++) { scanf("%d", &ino[i]); } TreeNode *root=createTree(0,n-1,0,n-1); queue<TreeNode*> que; que.push(root); printf("%d", root->data); int j = 0; while (!que.empty()) { TreeNode *t = que.front(); if (j != 0 && t != NULL) { printf(" %d", t->data); } j = 2; que.pop(); if (t->lefttree != NULL) { que.push(t->lefttree); } if (t->righttree != NULL) { que.push(t->righttree); } } return 0;}
1119已知先序后序求中序
// ConsoleApplication2.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include<iostream>#include<queue>#include<stack>#include<string>#include<string.h>#include<cstring>#include<vector>using namespace std;int pre[30];int pos[30];int ino[30];int k = 0;int CreateTree(int l1,int r1,int l2,int r2){if (l1 > r1) return 0;//如果没有某一子节点,则中序遍历不唯一if (l1 == r1)//如果没有任意子节点,则在这里截胡,直接存入数组返回1{ino[k++] = pre[l1];return 1;}int i = 0;for ( i = l2; pre[l1+1] != pos[i]; i++);//找到自己子节点中的根节点int ok = 1;ok &= CreateTree(l1 + 1, l1 + 1 + i - l2, l2, i);//在后序中,找到的该根节点及其之前的节点为当前结点的左孩子ino[k++]=pre[l1];//中序遍历嘛,这里存入数据ok &= CreateTree(l1 + 2 + i - l2, r1, i + 1, r2 - 1);//在后序中,找到的该根节点之后的节点,不包括该根节点,为当前节点的右孩子(l1+2+i-l2是左边界,该边界由i定义,而右边界为r1,与i无关,所以前面return0的判断条件那么写,就是我不管你有没有左右节点,我都往下传,判断没有则返回0)return ok;}int main(){while (1){int n;scanf("%d", &n);for (int i = 1; i <=n; i++){scanf("%d", &pre[i]);}for (int i = 1; i <= n; i++){scanf("%d", &pos[i]);}int ok=CreateTree(1, n, 1, n);ok ? printf("Yes") : printf("No");printf("\n");for (int i = 0; i < k; i++){if (i==0){printf("%d", ino[i]);}else{printf(" %d", ino[i]);}}}return 0;}
阅读全文
0 0
- PAT甲级1119,1086,1020总结
- PAT甲级1119
- PAT(甲级)1086
- PAT—甲级-1086
- PAT甲级1086
- PAT(甲级)1020
- PAT甲级1020
- 浙大PAT甲级-1020
- PAT甲级 1020
- [PAT-甲级]索引以及知识点总结
- PAT 甲级
- 1020 月饼 PAT PAT乙级&&1070. Mooncake (25) PAT甲级
- PAT甲级(Advance Level)冬季考试总结20151205
- PAT甲级 A1025.PAT RANKING
- PAT 甲级 1025 PAT Ranking
- PAT(甲级)1003
- PAT(甲级)1004
- PAT(甲级)1005
- 媒体调查:“晚上九点以后,就是百度灰色收入的黄金时间”
- 腾讯发布6月“星APP榜”:游戏娱乐APP揭幕暑期档
- IT桔子沙龙第71期:2016年智能硬件创投趋势探讨(上海场)
- 判断条件相结合
- 常用的搜索引擎技巧
- PAT甲级1119,1086,1020总结
- 游戏
- java中常见异常
- Splunk Cheat Sheet
- 猎聘python招聘之词云:满屏数据
- 《编程实践》chapter3字符串
- PAT 1040. 有几个PAT(25)
- hadoop编程(7)-MapReduce案例:使用TotalOrderPartitioner完成全局排序
- JAVA课程3 DO…WHLIE语句输出1!+1/2!+1/3!前20项目之和