【数据结构--二叉树】遍历&&前序遍历递归图解

二叉树:1、空树

               2、非空数:有跟节点和左子树、右子树构成(由递归方式实现)

搜索(查找)二叉树:结构上是左子树都比根节点小,右子树都比根节点大

 

前序遍历:根 左子树 右子树

中序遍历:左子树 根 右子树

后序遍历:左子树 右子树 根

代码表示:


typedef int BTDataType;
typedef struct BinaryTreeNode           //二叉树--->用带指针的结构体实现
{
	BTDataType data;//存放数据
	struct BinaryTreeNode* left;//左子树指针
	struct BinaryTreeNode* right;//右子树指针
}BTNode;

BTNode* BuyNode(BTDataType x)
{
	BTNode* newnode = (BTNode*)malloc(sizeof(BTNode));
	if (newnode == NULL)
	{
		perror("malloc fail!");
		return NULL;
	}
	newnode->data = x;//放入新的数据
	newnode->left = newnode->right = NULL;//递归终止条件
	return newnode;//返回新的节点
}
BTNode* CreateNode()//手动链接一个二叉树结构
{
	BTNode* node1 = BuyNode(1);
	BTNode* node2 = BuyNode(2);
	BTNode* node3 = BuyNode(3);
	BTNode* node4 = BuyNode(4);
	BTNode* node5 = BuyNode(5);
	BTNode* node6 = BuyNode(6);
	node1->left = node2;
	node1->right = node4;
	node2->left = node3;
	node4->left = node5;
	node4->right = node6;
	return node1;
}
//前序遍历
void PreOrder(BTNode* p)
{
	if (p == NULL)//为空树
	{
		printf("NULL ");
		return;
	}
	printf("%d ", p->data);
	PreOrder(p->left);
	PreOrder(p->right);
}
//中序遍历
void InOrder(BTNode* p)
{
	if (p == NULL)//为空树
	{
		printf("NULL ");
		return;
	}
	InOrder(p->left);
	printf("%d ", p->data);
	InOrder(p->right);
}
//后序遍历
void PostOrder(BTNode* p)
{
	if (p == NULL)//为空树
	{
		printf("NULL ");
		return;
	}
	PostOrder(p->left);
	PostOrder(p->right);
	printf("%d ", p->data);
}
int main()
{
	BTNode* p=CreateNode();//封装:将创建二叉树的过程进行封装
	PreOrder(p);
	printf("\n");
	InOrder(p);
	printf("\n");
	PostOrder(p);
	return 0;
}

前序遍历递归图解:

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

伱恏呀呀呀呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值