有一篇讲得非常好的:
https://blog.youkuaiyun.com/qq_26410101/article/details/80554845
先说一下一开始的错误,首先是在遇到叶子节点以后企图将temp clear调,这样是完全不对的;因为temp全局的,清空temp会让除了该叶子节点以外的前面的节点也清除掉。这样比如说访问完某个节点的左子树以后,再访问该节点的右子树时,根节点已经不在里面了。所以,不行。
考虑到上面那个错误以后,我又想那既然不能直接全部clear,那我在碰到叶子节点以后给他pop_back不就行了。比如下面这个例子,但是实际上提交完以后还是不行,分析一下,发现当我们遍历完根节点4的左子树的时候,准备遍历0时,这时temp存的不仅是根节点4,还有9,所以我们发现了新的问题。这是个问题,即我们不能明确弹出足够量的数据。
基于这些问题,调整思路,如果想继续使用vector来保存每个“数”的方式。就需要不把vector作为全局变量,而是作为dfs函数的参数进行处理,这样就能实现递归调用与递归返回时的状态的同步,注意,这是非常重要的思想和技巧,即如果要求递归的调用情况和对应的变量状态同步起来,可以考虑将该变量作为参数放入递归函数中。同时还要注意这里的vector必须使用值传递,不能使用&类型的地址传递。