牛客题目链接
目录
1.解题思路
1.1中序遍历打印
1.2前序创建二叉树
1.3注意点
博主这里用的是java实现
随手记一个知识:
hasNext读取到空格或者换行符会结束
hasNextLine读取到换行符才会结束(空格不会退出)
为什么要强调这个呢?
因为这道题,让我们输入一个字符串,而这个字符串内是包含空格的 ,如果使用hasNext,读取的字符串信息是不正确的。
1.解题思路
定义两个方法,一个用于创建树(前序),另一个用于遍历打印这颗树(中序)
1.1中序遍历打印
没啥好说的,先左,在根,然后右。
1.2前序创建二叉树
分析:
给定已被读取的字符串,依据字符串的元素(前序遍历),创建二叉树。
整体思路:
判断当前字符是否为空,为空,当前的root返回空,不为空,当前的root创建一个节点,赋值当前的字符,然后i++,左子树递归调用当前方法,然后右子树递归调用当前方法。
下面代码中的变量i,是int类型,Main方法的实例成员变量。(初始值==0)
1.3注意点
大家觉得,代码中没有下标 i 进行限制,它会越界吗?
答案当然是不会啦。
为啥?
很简单,我们都知道,递归方法(函数)都有这样一个性质,就是在递归到某个深度时,所有的递归方法就会按照出栈顺序,返回。
当str中的最后一个字符‘#’,被识别,那么将不会在创建新的createTree方法,而是返回之前所有的方法,i自然而然的就不会越界了。