• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 关于递归的理解?

关于递归的理解?

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了对递归的理解,缠论中的递归如何理解,如何理解递归,递归理解,对函数递归调用的理解等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:关于递归的理解?
描述:

var invertTree = function(root) {
    if(root === null) return null;
    var temp = root.left;
    root.left = invertTree(root.right);
    root.right = invertTree(temp);
    return root;
};

var invertTree = function(root) {
    if(root === null) return;
    // swap left and right child
    var temp = root.left;
    root.left = root.right;
    root.right = temp;
    // recurse into children
    invertTree(root.left);
    invertTree(root.right);
};

这两个程序的递归细节是一样的吗?


解决方案1:

这不是google的面试题吗233

题目是反转二叉树对吧,那么从根节点出发,反转左孩子,反转右孩子,交换左右孩子,over

注:以上三个操作可乱序进行

解决方案2:

不明白难点在哪里…… 这不就是大名鼎鼎的反转二叉树么……

如果你明白什么是反转二叉数的话,那应该很容易理解,我们要做的就是把每个节点的 left child 和 right child 互换。在 JavaScript 里 swap 两个变量需要手动写临时变量 temp。而要遍历每个节点做这样的处理,递归到它的 children 是必要的。

事实上在这个 case 里,invertTree 函数没有必要有返回值,因为它返回的就是它的参数 root。所以加上返回值可能反而有点 confusion。也许像下面这么写反而更容易看懂:

var invertTree = function(root) {
    if(root === null) return;
    // swap left and right child
    var temp = root.left;
    root.left = root.right;
    root.right = temp;
    // recurse into children
    invertTree(root.left);
    invertTree(root.right);
};

解决方案3:

交换树的左右节点
从一个节点出发,那就是left和right相互交换

var temp = root.left;
root.left = root.right
root.right = temp;
return root;

如果代码这样写,只是简单地做到了一个节点下的left、right交换,left、right下的节点并没有进行左右交换,要知道left、right下也可能是有节点的,那么需要进入left/right节点,交换其下的左右节点,这个过程和上面的过程相同,这个过程可以一直进行下去,直到其节点下面没有子节点,不需要再交换,这个条件就是if(root === null) return null;


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于递归的理解?

相关文章

  • 2017-06-07 iterm配置utf8编码,本地终端中文不乱码,ssh远程中文乱码,咋整啊
  • 2017-06-07 我为网站添加了一个A记录指向我的服务器IP,ping成功。但是浏览器通过域名访问不了,但可以通过IP访问。
  • 2017-06-07 求Vs2010和SQLSERVER2005,谁能帮我解决,会追加给分
  • 2017-06-07 升级MacOSSierra后ssh报错问题?
  • 2017-06-07 背景音乐问题
  • 2017-06-07 Python,input(‘’)语句里如果要添加符号’怎么做?
  • 2017-06-07 为何七牛的returnBody返回的不是标准JSON??
  • 2017-06-07 github上如何关注别人?
  • 2017-06-07 七牛delete文件跨域问题,七牛有什么地方能将我的域名加入解决这个问题吗
  • 2017-06-07 restful如何优雅实现restful接口的版本控制

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 请问下我的文件已经缓冲七牛了!可是利用七牛提供的地址打不开
    • 使用自定义域名间歇性404,而xxxuqiniudncom正常
    • rubyruby安装
    • ipythonnotebook不能导入numpy
    • python新手,遇到redis的问题,求大神!!!
    • 服务器在国外生成的token如何给国内的用户调用
    • 正则如何匹配七牛图片路径
    • 一致性哈希算法怎么保证数据的一致性
    • phpsdk里生成token的里面$bucket变量是做什么用的?
    • python中有没有像java中的jstack命令

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有