ツリーデータ構造実装(木)と基本操作

木の定義

図ツリーは、階層関係を有するノードの有限集合からなるnはデータ構造(N> = 0)です。それは上向き、下向きや葉のルートであることを意味逆さまの木のように見えるので、私たちは「木」と呼んでいます。
ここに画像を挿入説明

typedef struct BTree	//二叉树
{
	int val;
	struct BTree* rigth;
	struct BTree* left;
}BTree, *BTreePtr;

ツリーの作成と破棄

再帰的アルゴリズムは、簡単にツリーを作成し、破壊することができます。

TreeNode* CreateTree()
{
	int input = 0;
	scanf_s("%d", &input);

	TreeNode* t;

	if (input != 0)
	{
		t = (TreeNode*)malloc(sizeof(TreeNode));
		t->val = input;

		printf("\n%d的左孩子:\n", t->val);
		t->left = CreateTree();
		printf("\n%d的有孩子:\n", t->val);
		t->left = CreateTree();
	}
	else
	{
		return NULL;
	}

	return t;
}
void DestroyBTree(BTree* t)
{
	if (!t)
		return;

	BTree* left = t->left;
	BTree* rigth = t->rigth;
	free(t);
	t = NULL;
	DestroyBTree(left);
	DestroyBTree(rigth);
}

ツリーのトラバース

予約限定(予約限定)

ルート - >左の子 - >右の子。

void PreorderTraverseBTree(BTree* tree)
{
	if (!tree)
		return;
	printf("%d\t", tree->val);

	PreorderTraverseBTree(tree->left);
	PreorderTraverseBTree(tree->rigth);
}

INORDERトラバーサル(INORDER)

左の子ノード - >ルート - >右の子

void inorderBTree(BTree* tree)
{
	//递归出口
	if (!tree)
		return;

	inorderBTree(tree->left);
	printf("%d\t", tree->val);
	inorderBTree(tree->rigth);
}

後順(後順)

左の子ノード - >右の子 - >ルート

void postorderBTree(BTree* tree)
{
	if (!tree)
		return;
	postorderBTree(tree->left);
	postorderBTree(tree->rigth);
	printf("%d\t", tree->val);
}

参考文献Baiduの百科事典

公開された19元の記事 ウォンの賞賛2 ビュー2530

おすすめ

転載: blog.csdn.net/SC_king/article/details/105203212