Gistrec

ОП Лаб 3

May 14th, 2017
235
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.19 KB | None | 0 0
  1. /* Заголовочный файл MyStack.h */
  2. // Включаемый файл, который содержит функции,
  3. // часто используемые, но не часто изменяемые
  4. #pragma once
  5.  
  6. #include <SDKDDKVer.h>
  7. #include <stdio.h>
  8.  
  9. struct TreeNode {
  10.     char data;
  11.     TreeNode* left;
  12.     TreeNode* right;
  13. };
  14.  
  15. TreeNode* writeTree(FILE *file) {
  16.     char sym;
  17.     TreeNode* node;
  18.     fscanf(file, "%c", &sym);
  19.     switch (sym) {
  20.     case '(':
  21.         node = new TreeNode;
  22.         fscanf(file, "%c", &sym);
  23.         printf("%c ", sym);
  24.         node->data = sym;
  25.         node->left = writeTree(file);
  26.         node->right = writeTree(file);
  27.         fscanf(file, "%c", &sym);
  28.         return node;
  29.     case '0':
  30.         return NULL;
  31.     case ',':
  32.         node = writeTree(file);
  33.         return node;
  34.     }
  35. }
  36.  
  37. char search;
  38. int result = 0;
  39.  
  40. void recursiveParseTree(TreeNode* node) {
  41.     if (node != NULL && result == 0) {
  42.  
  43.         recursiveParseTree(node->left);
  44.         if (node->data == search) {
  45.             result = 1;
  46.             return;
  47.         }
  48.         if (result == 0) printf("%c ", node->data);
  49.         recursiveParseTree(node->right);
  50.     }
  51. }
  52.  
  53. void getEntrance(TreeNode* tree) {
  54.     recursiveParseTree(tree);
  55.     if (result == 1) printf("\nFound!\n");
  56.     else printf("\nNot Found\n");
  57. }
  58.  
  59. void recursiveParseTree(TreeNode* node) {
  60.     if (node != NULL) {
  61.         recursiveParseTree(node->left);
  62.         recursiveParseTree(node->right);
  63.         printf("Wow: %c\n", node->data);
  64.     }
  65. }
  66.  
  67. /* Файл исходного кода Tree.cpp */
  68. // Tree.cpp: определяет точку входа для консольного приложения.
  69. using namespace std;
  70.  
  71. #include "MyStack.h"
  72.  
  73. void main() {
  74.     FILE* file = fopen("input.txt", "r");
  75.     fscanf(file, "%c\n", &search);
  76.     printf("Search: %c\n", search);
  77.     // Создание дерева
  78.     printf("Write tree: ");
  79.     TreeNode* tree = writeTree(file);
  80.     // Получение первого вхождения
  81.     printf("\nParse tree: ");
  82.     getEntrance(tree);
  83. }
  84.  
  85. /* Файлы ресурсов input.txt */
  86. A
  87. (A,(L,(C,0,0),0),(D,(E,0,(F,0,0)),(D,(H,0,0),(H,0,0))))
Advertisement
Add Comment
Please, Sign In to add comment