二叉树的层次遍历

// 二叉树的层次遍历
#include
#include
#include
#include
using namespace std;

const int N = 20;

// 定义树的节点的结构体
struct BTNode
{
	char data; // 数据域
	BTNode* left; // 左孩子指针
	BTNode* right; // 右孩子指针
};

class BTree
{
public:

	// 构造函数
	BTree()
	{
		this->root = NULL;
	}

	// 利用前序遍历建立二叉树
	void CreateTree(BTNode** root)
	{
		char x;
		cin >> x;
		if (x == '#') *root = NULL;
		else
		{
			*root = new BTNode[N];
			assert(*root); // 断言
			(*root)->data = x; // 给该根节点赋值
			CreateTree(&(*root)->left); // 递归建立左子树
			CreateTree(&(*root)->right); // 递归建立右子树
		}
	}

	void LevelPrint(BTNode* root)
	{
		queue q;
		q.push(root);
		while (!q.empty())
		{
			cout << q.front()->data << ' ';
			if (q.front()->left != NULL) q.push(q.front()->left);
			if (q.front()->right != NULL) q.push(q.front()->right);
			q.pop();
		}
	}

	BTNode* root;
};

int main()
{
	BTree t;
	t.CreateTree(&t.root); // 通过传址来改变该指针,建立二叉树
	t.LevelPrint(t.root);
	cout << endl;
	return 0;
}

你可能感兴趣的:(数据结构,数据结构,二叉树)