У меня есть программа, написанная на C, которая перебирает дерево в обратном, обратном порядке и обратном порядке, отдельные функции которого сильно зависят от рекурсии.Как мне изменить эти функции, чтобы они выполняли одну и ту же задачу, но без использования какой-либо рекурсии?Я потратил много часов, пытаясь выяснить это, используя переменные, которые временно хранят значения, но, к сожалению, я продолжаю рисовать пустым.Я использую компилятор GCC в Ubuntu Linux BTW.
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
struct node
{
int data;
struct node* left;
struct node* right;
};
struct node* newNode(int data)
{
struct node* node = (struct node*)
malloc(sizeof(struct node));
node->data = data;
node->left = NULL;
node->right = NULL;
return(node);
}
void reversePostOrder(struct node* node)
{
if (node == NULL)
return;
reversePostOrder(node->right);
reversePostOrder(node->left);
printf("%d ", node->data);
}
void reverseInOrder(struct node* node)
{
if (node == NULL)
return;
reverseInOrder(node->right);
printf("%d ", node->data);
reverseInOrder(node->left);
}
void reversePreOrder(struct node* node)
{
if (node == NULL)
return;
printf("%d ", node->data);
reversePreOrder(node->right);
reversePreOrder(node->left);
}
int main()
{
struct node *root = newNode(1);
root->left = newNode(-2);
root->right = newNode(-3);
root->left->left = newNode(4);
root->left->right = newNode(5);
root->right->left =newNode(6);
root->right->right=newNode(7);
root->left->right->left=newNode(-8);
root->left->right->right=newNode(-9);
root->right->right->left=newNode(10);
root->right->right->right=newNode(11);
root->right->right->right->left=newNode(-12);
root->right->right->right->right=newNode(-13);
root->right->right->right->right->left=newNode(14);
printf("\nReverse Preorder traversal of binary tree is \n");
reversePreOrder(root);
printf("\nReverse Inorder traversal of binary tree is \n");
reverseInOrder(root);
printf("\nReverse Postorder traversal of binary tree is \n");
reversePostOrder(root);
getchar();
return 0;
}