二叉树的一级指针递归创建

首先二叉树的一级指针递归创建,话不多说直接给出源码

#include <stdio.h>

#include <stdlib.h>

struct node

{

       char data;

       node *Lchild;

       node *Rchild;

}tree;

node *creattree(node *l)

{

       char ch;

       scanf("%c",&ch);



       //输入#代表终止

       if(ch=='#')

       {

              l=NULL;

       }

       else

       {

              l=(node *)malloc(sizeof(node));

              l->data=ch;

              l->Lchild=creattree(l->Lchild);

              l->Rchild=creattree(l->Rchild);

       }

       return l;

}

int main()

{

       node *l;

       l=&tree;

       printf("请输入:");

       creattree(l);

}

这里可以有两种输入方式,第一种输入方式为直接输入一串字符,中间没有空格

下面是运行结果图

 第二种是输入完一个敲一个回车,但是对应代码有一点点不同

#include <stdio.h>
#include <stdlib.h>
struct node
{
	char data;
	node *Lchild;
	node *Rchild;
}tree;
node *creattree(node *l)
{
	char ch;
	printf("请输入:");
	scanf("%c",&ch);
    getchar();
	//输入#代表终止 
	if(ch=='#')
	{
		l=NULL;
	}
	else
	{
		l=(node *)malloc(sizeof(node));
		l->data=ch;
		l->Lchild=creattree(l->Lchild);
		l->Rchild=creattree(l->Rchild);
	}
	return l;
}
int main()
{
	node *l;
	l=&tree;
	l=creattree(l);

}

下面是运行结果图

通过运行结果讲一下思路

首先从主函数进入creattree函数,这时我们处于第一世界输入根结点的数据,然后将这个值赋给l开辟的结点里去,再次调用这个函数对根结点的左孩子l->Lchild进行输入,这个时候我们可以说是进入了第二个世界,也就是第一个世界里世界,以l->Lchild为形参(也就是说此时形参l为l->Lchild),再次调用这个函数进行l->Lchild->Lchild的输入,这个时候我们也由此进入了第三世界,也就是第二世界的里世界,我们输入#,这个结点会被判为空,接着跳到下一个语句return l,l为l->Lchild->Lchild,这时我们退出了第三世界回到了第二世界,并将它赋给l->Lchild->Lchild,然后再调用这个函数进行的是l->Rchild->Rchild的输入,我们也输入#得到空结点,并赋给l->Rchild->Rchild,接着进行下一个return l,此时的l为l->Lchild,我们也由此回到了第一世界,进入l->Rchild的数据输入,也由此进入到了第二世界,再调用这个函数对l->Rchild->Lchild进行输入,同时进入到了第三世界,然后return l,l为l->Rchild->Lchild,回到第二世界,接着再次调用这个函数进行l->Rchild->Rchild的输入,然后return l,l为l->Rchild->Rchild,回到第二世界,然后return l,l为l->Rchild,回到第一世界,最后再return l,l为根结点l结束这个函数并把l赋给主函数里的l

以上就是该函数递归的思路

如果觉得我讲的很复杂,或者有什么不好的地方,可以去自己调试一下,这样可能印象更加深刻一些,可能能更好的理解

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值