您的位置:首页 > 编程语言 > C语言/C++

二叉树遍历C++11实现———前序、中序、后序、层序遍历(非递归)

2017-12-14 23:08 393 查看

Makefile:

g++ -std=c++11 -o biTreeTrasverse biTreeTrasverse.cpp


代码:

biTreeTrasverse.cpp

#include <stack>
#include <queue>
#include <iostream>

struct node {
char val;
node* left;
node* right;
};


前序遍历

void preOrder(node *root)
{
std::stack<node*> stack;
node *p = root;
while ((nullptr != p) || (!stack.empty()))
{
while (nullptr != p)
{
std::cout << p->val;
stack.push(p);
p = p->left;
}
if (!stack.empty())
{
p = stack.top();
stack.pop();
p = p->right;
}
}
}


中序遍历

void inOrder(node *root)
{
std::stack<node*> stack;
node *p = root;
while ((nullptr != p) || (!stack.empty()))
{
while (nullptr != p)
{
stack.push(p);
p = p->left;
}
if (!stack.empty())
{
p = stack.top();
stack.pop();
std::cout << p->val;
p = p->right;
}
}
}


后续遍历

void postOrder(node *root)
{
std::stack<node*> stack;
std::stack<node*> store;
node *p = root;
while ((nullptr != p) || (!stack.empty()))
{
while (nullptr != p)
{
store.push(p);
stack.push(p);
p = p->right;
}
if (!stack.empty())
{
p = stack.top();
stack.pop();
p = p->left;
}
}

while (!store.empty())
{
p = store.top();
store.pop();
std::cout << p->val;
}
}


层序遍历

void levelOrder(node* root)
{
std::queue<node*> queue;
if (nullptr != root)
{
queue.push(root);
}
while (!queue.empty())
{
node* p = queue.front();
queue.pop();
std::cout << p->val;
if (nullptr != p->left)
{
queue.push(p->left);
}
if (nullptr != p->right)
{
queue.push(p->right);
}
}
}


main函数

int main()
{
node K{'K', nullptr, nullptr};
node J{'J', nullptr, nullptr};
node I{'I', nullptr, nullptr};
node H{'H', nullptr, &K};
node G{'G', nullptr, &J};
node F{'F', &I, nullptr};
node E{'E', nullptr, nullptr};
node D{'D', &H, nullptr};
node C{'C', &F, &G};
node B{'B', &D, &E};
node A{'A', &B, &C};
node *root = &A;
std::cout << "preOrder:  ";
preOrder(root);
std::cout << std::endl;
std::cout << "inOrder:   ";
inOrder(root);
std::cout << std::endl;
std::cout << "postOrder: ";
postOrder(root);
std::cout << std::endl;
std::cout << "levelOrder:";
levelOrder(roo
97ea
t);
std::cout << std::endl;
}


二叉树



结果

preOrder:   ABDHKECFIGJ
inOrder:    HKDBEAIFCGJ
postOrder:  KHDEBIFJGCA
levelOrder: ABCDEFGHIJK
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二叉树 遍历 c++11
相关文章推荐