- 网上有不少关于二叉树遍历的博客,也几乎都用了下面的方法来进行创建一个二叉树:
- 上面的代码中主要去关心如何创建二叉树了,但并没有去释放动态申请的内存空间,但由于进程退出的时候,系统会回收资源,从而也不用担心该问题,那把关注点放到“如何创建二叉树”这个问题上来。使用这种递归的方式来创建二叉树,我们需要注意的是:
很多博客中使用上面的递归方法创建二叉树的时候,并没有使用 getchar 来对输入中的\n进行忽略。使用上面的处理后,我们每次取的都是每一行的第一个字符。就像下面那样,我们创建的二叉树只有一个根节点。
也就是说,上面创建二叉树时,并没有使用while 和 getchar 来过滤上次输入的\n回车的话,只是使用 scanf 来进行输入,则需要我们输入的房还是应该是一行输入,对应的二叉树位置上为空节点的,输入#,如下:
运行时:
- 还有另外一种输入的方法,看下面的链接,在格式控制符前面加一个空格,就能把上一次的输入中的回车符清除掉
如scanf("%d",&a)改成scanf(" %d",&a)就行了。
为什么会这样呢?我在格式控制符前面加空格能过滤回车符?可以使用其他符号吗?已经有人问过了,答案是不能,只能用空格
因为 scanf 的双引号里面除了格式占位符(%c、%d)之外,其他的字符必须原模原样地输入,比如 scanf("%d,%d", &a, &b); 在输入的时候必须输入3,4才是正确的输入(两个数必须逗号分隔)。只有空格是例外,如果 scanf 的双引号里面有空格,空格对应的位置可以是你按空格键产生的空格,也可以是其他的非显示字符(就是在屏幕上无法显示的字符,如换行符、按Tab产生的制表符等),因此,你在输入的时候,按Enter 产生的换行可以由空格接收。