二叉树深度优先遍历和广度优先遍历

二叉树先序、后序、中序遍历非递归版本请参照:


二叉树非递归先序遍历、中序遍历、后序遍历


深度优先遍历:

int bitreeDeepOrder(bitreeNode * root)
{
	stack<bitreeNode *> st;
	st.push(root);
	//printf("%d,", root->value);

	do
	{
		root = st.top();
		st.pop();

		printf("%d,", root->value);

		if(root->right)
			st.push(root->right);

		if(root->left)
			st.push(root->left);

		if(st.empty())
			break;

	}while(1);

	return 0;
}

广度优先遍历:


int bitreeWideOrder(bitreeNode * root)
{
	queue<bitreeNode *> qu;
	qu.push(root);
	//printf("%d,", root->value);

	do
	{
		root = qu.front();
		qu.pop();

		printf("%d,", root->value);

		if(root->left)
			qu.push(root->left);

		if(root->right)
			qu.push(root->right);

		if(qu.empty())
			break;

	}while(1);

	return 0;
}

实验:

#define BITREE_SIZE 10
int _tmain(int argc, _TCHAR* argv[])
{
	bitreeNode * root = (bitreeNode *)malloc(sizeof(bitreeNode) * BITREE_SIZE);
	for(int i=0; i<BITREE_SIZE; i++)
	{
		root[i].value = i;
		if((i * 2 +1) < BITREE_SIZE)
			root[i].left = &(root[i*2+1]);
		else
			root[i].left = NULL;

		if((i * 2 + 2) < BITREE_SIZE)
			root[i].right = &(root[i*2 + 2]);
		else
			root[i].right = NULL;
	}

	bitreeDeepOrder(root);

	printf("\n");

	bitreeWideOrder(root);

	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值