数据结构 &二叉树(二)

首先我们对二叉树的结构进行设计,以’#'作为结束符,对类型进行重定义。

#define END '#'
typedef char ElemType;

二叉链表的结构设计:

typedef struct BtNode//BinaryTreeNode
{
	struct BtNode* leftchild;//左孩子节点
	struct BtNode* rightchild;//右孩子节点
	ElemType data;//数据域
}BtNode,*BinaryTree;

三叉链表的结构设计:

typedef struct BtNode//BinaryTreeNode
{
	struct BtNode* leftchild;//左孩子节点
	struct BtNode* parent;//双亲指针
	struct BtNode* rightchild;//右孩子节点
	ElemType data;//数据域
}BtNode,*BinaryTree;

二叉树的遍历:
所谓树的遍历,就是按照某种次序遍历树中的节点,要求每个节点访问仅且访问一次
设访问根节点记作V,遍历根的左子树记作L,遍历根的右子树记作R,则有以下几种遍历方式:
在这里插入图片描述
下面是前序遍历、中序遍历以及后序遍历的规则:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按照上面规则,我们给出下面这颗二叉树的前序、中序以及后序遍历:

在这里插入图片描述
其前序遍历为:ABCDEFGH
中序遍历为:CBEDFAGH
后序遍历为:CEFDBHGA

下面我们来给出中序遍历的代码:

void InOrder(BtNode* p)
{
	if (p != NULL)
	{
		InOrder(p->leftchild);
		printf("%c ", p->data);
		InOrder(p->rightchild);
	}
}

前序遍历代码:

void FrontOrder(BtNode* p)
{
	if (p != NULL)
	{
	    printf("%c ", p->data);
		FrontOrder(p->leftchild);
		FrontOrder(p->rightchild);
	}
}

后序遍历代码:

void EndOrder(BtNode* p)
{
	if (p != NULL)
	{
		EndOrder(p->leftchild);
		EndOrder(p->rightchild);
		printf("%c ", p->data);
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值