为了账号安全,请及时绑定邮箱和手机立即绑定

关于递归的理解?

关于递归的理解?

一只萌萌小番薯 2019-04-21 20:14:42
varinvertTree=function(root){if(root===null)returnnull;vartemp=root.left;root.left=invertTree(root.right);root.right=invertTree(temp);returnroot;};varinvertTree=function(root){if(root===null)return;//swapleftandrightchildvartemp=root.left;root.left=root.right;root.right=temp;//recurseintochildreninvertTree(root.left);invertTree(root.right);};这两个程序的递归细节是一样的吗?
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超2个赞

不明白难点在哪里……这不就是大名鼎鼎的反转二叉树么……
如果你明白什么是反转二叉数的话,那应该很容易理解,我们要做的就是把每个节点的leftchild和rightchild互换。在JavaScript里swap两个变量需要手动写临时变量temp。而要遍历每个节点做这样的处理,递归到它的children是必要的。
事实上在这个case里,invertTree函数没有必要有返回值,因为它返回的就是它的参数root。所以加上返回值可能反而有点confusion。也许像下面这么写反而更容易看懂:
varinvertTree=function(root){
if(root===null)return;
//swapleftandrightchild
vartemp=root.left;
root.left=root.right;
root.right=temp;
//recurseintochildren
invertTree(root.left);
invertTree(root.right);
};
                            
查看完整回答
反对 回复 2019-04-21
  • 2 回答
  • 0 关注
  • 309 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信