二叉树创建和遍历详细分析

对于二叉树,原来始终不明白用递归前序创建,前序遍历究竟是怎么回事,今天晚上好好琢磨了下。

两种不同的方法:

1、可以考虑把递归调用的函数考虑为调用不同的函数,方便分析。

2,如果考虑为调用同一个函数时,递归是用栈来实现的,用栈来分析的话就比较方便。




对于如图所示的一个二叉树,前序创建时的代码为:

/**
  * @brief     递归前序创建二叉树
  * @attention 按前序输入二叉树中结点的值,#表示空树,构造二叉链表表示二叉树T
  */
int preCreateBiTree(BiTNode *&T)
{
	char ch;
	scanf("%c", &ch);
	if ( ch == '#' )
		T = NULL;
	else {
		T = (BiTNode *)malloc(sizeof(BiTNode));
		T->data = ch;
		preCreateBiTree(T->lchild);
		preCreateBiTree(T->rchild);
	}
}
我们键盘输入为字符串"ABD###CF##G##"。

用第一种方法分析时:


用第二种方法分析时:创建左子树递归调用preCreateBiTree(T->lchild)时,依次入栈为A、B、D,然后依次D、B、A出栈。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值