关于递归的理解?

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;
//swapleftandrightchild
vartemp=root.left;
root.left=root.right;
root.right=temp;
//recurseintochildren
invertTree(root.left);
invertTree(root.right);
};
这两个程序的递归细节是一样的吗?
一只萌萌小番薯
浏览 310回答 2
2回答

森林海

不明白难点在哪里……这不就是大名鼎鼎的反转二叉树么……如果你明白什么是反转二叉数的话,那应该很容易理解,我们要做的就是把每个节点的leftchild和rightchild互换。在JavaScript里swap两个变量需要手动写临时变量temp。而要遍历每个节点做这样的处理,递归到它的children是必要的。事实上在这个case里,invertTree函数没有必要有返回值,因为它返回的就是它的参数root。所以加上返回值可能反而有点confusion。也许像下面这么写反而更容易看懂:varinvertTree=function(root){if(root===null)return;//swapleftandrightchildvartemp=root.left;root.left=root.right;root.right=temp;//recurseintochildreninvertTree(root.left);invertTree(root.right);};
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript