【题目描述】
【代码思路】
这又是一个深度优先的例子,先解读一下题干,其实就是想从左至右的找到一颗树的所有叶结点,而遍历一棵树的所有结点,有深度优先和广度优先,这道题显然是深度优先更合适,因为广度优先是按层遍历的,不能保证从左至右找到所有叶结点,比如这道题广度优先找到的叶结点顺序就是[6,9,8,7,4]这不符合题目要求,所以用深度优先。
这种递归的题目,首先要抓住一个点理清递归的函数内部逻辑,就拿结点5来说,我们想找5的从左至右的叶结点,那么应该先看遍历他的左子树,后遍历右子树,当然在开始左右子树的遍历之前,需要对结点5做出判断,5是否有左右子树,如果没有,说明5就是一个叶结点,需要放到一个字符串中,就是下面这句:
如果5结点有左子树,那么对左子树调用递归函数,同样先判断左子树的根结点是否为空,是否有左右子树,如果有,先对左子树递归,后对右子树递归。就是下面