二叉树的节点结构:
typedef struct _TreeNode
{
int _data;
struct _TreeNode * _left;
struct _TreeNode * _right;
}TreeNode;
使用递归就可以进行三种遍历
先序:
// 先序遍历
void preOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
cout << root->_data << " ";
preOrderTraverse(root->_left);
preOrderTraverse(root->_right);
}
}
中序:
// 中序遍历
void midOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
midOrderTraverse(root->_left);
cout << root->_data << " ";
midOrderTraverse(root->_right);
}
}
后序:
// 后序遍历
void postOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
postOrderTraverse(root->_left);
postOrderTraverse(root->_right);
cout << root->_data << " ";
}
}
完整代码:
#include <stdio.h>
#include <iostream>
using namespace std;
typedef struct _TreeNode
{
int _data;
struct _TreeNode * _left;
struct _TreeNode * _right;
}TreeNode;
// 前序遍历
void preOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
cout << root->_data << " ";
preOrderTraverse(root->_left);
preOrderTraverse(root->_right);
}
}
// 中序遍历
void midOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
midOrderTraverse(root->_left);
cout << root->_data << " ";
midOrderTraverse(root->_right);
}
}
// 后序遍历
void postOrderTraverse(TreeNode *root){
// 如果根节点存在
if (root)
{
postOrderTraverse(root->_left);
postOrderTraverse(root->_right);
cout << root->_data << " ";
}
}
// 创建一棵树
int main(int argc, char const *argv[])
{
TreeNode a, b, c, d, e, f;
// 创建一个指向根节点的指针
TreeNode* root = &a;
a._data = 1;
b._data = 2;
c._data = 3;
d._data = 4;
e._data = 5;
f._data = 6;
a._left = &b;
a._right = &c;
b._left = &d;
b._right = &e;
c._left = NULL;
c._right = &f;
d._left = d._right = NULL;
e._left = e._right = NULL;
f._left = f._right = NULL;
preOrderTraverse(root);
cout << endl;
midOrderTraverse(root);
cout << endl;
postOrderTraverse(root);
cout << endl;
return 0;
}
结果:
1 2 4 5 3 6
4 2 5 1 3 6
4 5 2 6 3 1