数据结构之树(tree)的实现及其基本操作

树的定义

树状图是一种数据结构,它是由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);
}

树的遍历

先序遍历(Preorder)

根节点->左子节点->右子节点。

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

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

中序遍历(Inorder)

左子节点->根节点->右子节点

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

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

后序遍历(Postorder)

左子节点->右子节点->根节点

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

参考资料百度百科

发布了19 篇原创文章 · 获赞 2 · 访问量 2530

猜你喜欢

转载自blog.csdn.net/SC_king/article/details/105203212