1.先上代码
#include<vector>
#include <iostream>
#include <queue>
using namespace std;
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int a, TreeNode* l, TreeNode* r) {
val = a;
left = l;
right = r;
}
};
//二叉树先序遍历
void pre_order(TreeNode* tree) {
if (!tree)
return;
cout << tree->val << " ";
pre_order(tree->left);
pre_order(tree->right);
}
//二叉树中序遍历
void middle_order(TreeNode* tree) {
if (!tree)
return;
middle_order(tree->left);
cout << tree->val << " ";
middle_order(tree->right);
}
//二叉树后序遍历
void post_order(TreeNode* tree) {
if (!tree)
return;
post_order(tree->left);
post_order(tree->right);
cout << tree->val << " ";
}
//二叉树层序遍历
void Sequence_order(TreeNode* tree) {
queue<TreeNode*> q;
if (tree) //如果二叉树不空,放入队尾
q.push(tree);
while(!q.empty())//如果队列不空
{
TreeNode* node = q.front();//取队列第一个元素
cout << node->val << " ";
q.pop();
if (node->left)//不为NULL
q.push(node->left);
if(node->right)
q.push(node->right);
}
}
int main() {
//初始化一个二叉树
TreeNode* tree = new TreeNode(1,NULL,NULL);
TreeNode* node1 = new TreeNode(2, NULL, NULL);
TreeNode* node2 = new TreeNode(3, NULL, NULL);
TreeNode* node3 = new TreeNode(4, NULL, NULL);
TreeNode* node4 = new TreeNode(5, NULL, NULL);
tree->left = node1;
tree->right = node2;
node1->left = node3;
node2->left = node4;
//二叉树的先序,中序,后序,层序遍历
pre_order(tree);
cout << endl;
middle_order(tree);
cout << endl;
post_order(tree);
cout << endl;
Sequence_order(tree);
return 0;
}
2.对代码的解释
代码中测试用的二叉树为:
代码执行结果:
对先序,中序和后序遍历的代码这里简单提一句:用的递归实现,非常好理解。非递归实现,读者可以自行查找相关资料。
对于层序遍历,要借助队列queue来实现。
欢迎留言评论!如果文章帮助到了您,点个关注、收藏吧!