129. 求根到叶子节点数字之和

有一篇讲得非常好的:

https://blog.csdn.net/qq_26410101/article/details/80554845    

先说一下一开始的错误,首先是在遇到叶子节点以后企图将temp clear调,这样是完全不对的;因为temp全局的,清空temp会让除了该叶子节点以外的前面的节点也清除掉。这样比如说访问完某个节点的左子树以后,再访问该节点的右子树时,根节点已经不在里面了。所以,不行。

  考虑到上面那个错误以后,我又想那既然不能直接全部clear,那我在碰到叶子节点以后给他pop_back不就行了。比如下面这个例子,但是实际上提交完以后还是不行,分析一下,发现当我们遍历完根节点4的左子树的时候,准备遍历0时,这时temp存的不仅是根节点4,还有9,所以我们发现了新的问题。这是个问题,即我们不能明确弹出足够量的数据。

 

  

基于这些问题,调整思路,如果想继续使用vector来保存每个“数”的方式。就需要不把vector作为全局变量,而是作为dfs函数的参数进行处理,这样就能实现递归调用与递归返回时的状态的同步,注意,这是非常重要的思想和技巧,即如果要求递归的调用情况和对应的变量状态同步起来,可以考虑将该变量作为参数放入递归函数中。同时还要注意这里的vector必须使用值传递,不能使用&类型的地址传递。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值