/**递归方式遍历**/
//先序递归遍历
void preOrder(Node * root)
{
if (root != nullptr)
{
visit(root);
preOrder(root->left);
preOrder(root->right);
}
}
//中序递归遍历
void inOrder(Node * root)
{
if (root != nullptr)
{
inOrder(root->left);
visit(root);
inOrder(root->right);
}
}
//后序递归遍历
void postOrder(Node * root)
{
if (root != nullptr)
{
postOrder(root->left);
postOrder(root->right);
visit(root);
}
}
/**非递归方式遍历**/
//先序遍历
void preOrderF(Node * root)
{
if (root == nullptr)
return;
stack<Node *> s;
s.push(root);
Node *p = nullptr;
while (!s.empty())
{
p = s.top();
s.pop();
cout << p->val << " ";
if (p->right)
s.push(p->right);
if (p->left)
s.push(p->left);
}
}
//中序遍历
void inOrderF(Node * root)
{
if (root == nullptr)
return;
stack<Node *> s;
Node *p = root;
while (p||!s.empty())
{
if (p)
{
s.push(p);
p = p->left;
}
else
{
p = s.top();
s.pop();
cout << p->val << " ";
p = p->right;
}
}
}
//后序遍历
void postOrderF(Node * root)
{
if (root == nullptr)
return;
stack<Node *> s;
vector<int> rs;
s.push(root);
Node *p = nullptr;
while (!s.empty())
{
p = s.top();
s.pop();
rs.insert(rs.begin(),p->val);
if (p->left)
s.push(p->left);
if (p->right)
s.push(p->right);
}
for (int i = 0; i < rs.size(); i++)
cout << rs[i] << " ";
}