二叉树的三种遍历 递归实现 - C++实现

二叉树的节点结构:

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

发布了145 篇原创文章 · 获赞 21 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_43826242/article/details/101018481