樹的創建、前序和層序遍歷

1、樹節點的定義方式
2、樹節點的創建
3、樹的前序遍歷
4、樹的層序遍歷

#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <vector>
#include <queue>
using namespace std;

const int maxn = 100;

struct node
{
	int data;			// 存放當前節點的數據
	int layer;			// 當前節點的層次
	vector<int> child;	// 存放所有子節點的下標
}tree[maxn];

int index = 0;
int newNode(int v)
{
	tree[index].data = v;
	tree[index].child.clear();
	return index++;
}

// 樹的先序遍歷
void preorder(int root)
{
	printf("%d ", tree[root].data);
	int len = tree[root].child.size();
	for (int i = 0; i < len; ++i)
	{
		preorder(tree[root].child[i]);
	}
}

// 樹的層序遍歷
void layerOrder(int root)
{
	queue<int> q;
	q.push(root);
	tree[root].layer = 0;	// 根節點的層號爲0

	while (!q.empty())
	{
		int loc = q.front();
		printf("layer = %d, data =  %d\n", tree[loc].layer, tree[loc].data);

		int len = tree[loc].child.size();
		for (int i = 0; i < len; ++i)
		{
			int child = tree[loc].child[i];
			tree[child].layer = tree[loc].layer + 1;
			q.push(child);
		}
	}
}

int main()
{
	return 0;
}

謝謝閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章