//https://blog.csdn.net/alxe_made/article/details/94721195
#include <iostream>
#include <stack>
using namespace std;
struct Node
{
int value;
Node *left;
Node *right;
Node(int value) : value(value), left(nullptr), right(nullptr) {}
};
void preOrderRecur(Node *head)
{
if (head == nullptr)
{
return;
}
cout << head->value << " ";
preOrderRecur(head->left);
preOrderRecur(head->right);
}
void inOrderRecur(Node *head)
{
if (head == nullptr)
{
return;
}
inOrderRecur(head->left);
cout << head->value << " ";
inOrderRecur(head->right);
}
void posOrderRecur(Node *head)
{
if (head == nullptr)
{
return;
}
posOrderRecur(head->left);
posOrderRecur(head->right);
cout << head->value << " ";
}
void preOrderIter(Node *head)
{
if (head == nullptr)
{
return;
}
stack<Node *> nstack;
nstack.push(head);
while (!nstack.empty())
{
Node *head = nstack.top();
cout << head->value << ",";
nstack.pop();
if (head->right != nullptr)
{
nstack.push(head->right);
}
if (head->left != nullptr)
{
nstack.push(head->left);
}
}
}
void inOrderIter(Node *head)
{
if (head == nullptr)
{
return;
}
stack<Node *> nstack;
while (!nstack.empty() || head != nullptr)
{
if (head != nullptr)
{
nstack.push(head);
head = head->left;
}
else
{
head = nstack.top();
cout << head->value << ",";
nstack.pop();
head = head->right;
}
}
}
void posOrderIter(Node *head)
{
if (head == nullptr)
{
return;
}
stack<Node *> nstack1, nstack2;
nstack1.push(head);
while (!nstack1.empty())
{
Node *head = nstack1.top();
nstack2.push(head);
nstack1.pop();
if (head->left != nullptr)
{
nstack1.push(head->left);
}
if (head->right != nullptr)
{
nstack1.push(head->right);
}
}
while (!nstack2.empty())
{
cout << nstack2.top()->value << ",";
nstack2.pop();
}
}
int main()
{
Node *head = new Node(5);
head->left = new Node(3);
head->right = new Node(8);
head->left->left = new Node(2);
head->left->right = new Node(4);
head->right->left = new Node(7);
head->right->right = new Node(10);
head->right->left->left = new Node(6);
head->right->right->left = new Node(9);
head->right->right->right = new Node(11);
inOrderIter(head);
// cout << "\npre-order:";
// preOrderRecur(head);
// cout << "\nin-order:";
// inOrderRecur(head);
// cout << "\npos-order:";
// posOrderRecur(head);
}
二叉树的递归与非递归的遍历
最新推荐文章于 2024-07-21 21:32:15 发布