就是最近在做树方面的题时,发现JS和JAVA刷题和C刷题的一个很重要的区别就是传入null的区别
当遍历的时候,C传参数时可以传进去null的指针,因为递归进去,出来时,指针还是指着那个地方
但是JS和JAVA的话,如果传入的不是引用,那么就要通过返回值来记录之前的值,不然的话会丢失之前的状态。
我经常就在null这里犯错误,因为null在C中是null指针,但是在JS和JAVA中null不是引用,仅仅是一种特殊的值。
所以使用JS和JAVA刷关于树递归的题时,最好就是把你要求的值传进去后再返回出来,比如null节点。
比如说拿剑指offer中的26题二叉搜索树与双向链表来说。
我们按照C语言的思想用JS来写就是这样
function Convert(pRootOfTree) {
    // write code here
    if(pRootOfTree == null) return null;
    let pLast=null;
    ConvertNode(pRootOfTree,pLast);
    let pHead=pLast;
    while(pHead&&pHead.left){
        pHead=pHead.left;
    }
    return pHead;
}
function ConvertNode(pNode,pLast){
    if(pNode==null) return;
    if(pNode.left){
        ConvertNode(pNode.left,pLast);
    }
    pNode.left=pLast;
    if(pLast){
        pLast.right=pNode;
    }
    pLast=pNode;
    if(pNode.right){
        ConvertNode(pNode.right,pLast);
    }
}
 
但是这样无法运行通过,结果为空,为什么呢
这样有一个问题就是如下,当你递归时,到第一层 pLast=null,第二层 pLast=null,到第三层的时候pLast指向了4的那个节点,然后回上去的时候
pLast因为之前第二层是null值,也就是从第二层传进去第三层的时候传的不是地址(只是一个null的值而已),所以从第三层出来第二层的时候,之前的pLast就被清除了,
那么使用的就是第二层的pLast值,也就是此时pLast的值是null.。(可能比较绕口,但是你应该能懂)
好啦渣渣总结完啦,如果你也同时用多种语言的话,希望不要和我踩一样的坑。正确的做法如下
function Convert(pRootOfTree)
{
    // write code here
    if(pRootOfTree == null) return null;
    let pLast=null;
    pLast=ConvertNode(pRootOfTree,pLast);
    let pHead=pLast;
    while(pHead&&pHead.left){
        pHead=pHead.left;
    }
    return pHead;
}
function ConvertNode(pNode,pLast){
    if(pNode==null) return;
    if(pNode.left){
        pLast=ConvertNode(pNode.left,pLast);
    }
    pNode.left=pLast;
    if(pLast){
        pLast.right=pNode;
    }
    pLast=pNode;
    if(pNode.right){
        pLast=ConvertNode(pNode.right,pLast);
    }
    return pLast;
}

JS、JAVA刷题和C刷题的一个很重要的区别的更多相关文章

  1. Java阶段性测试--第四五六大题参考代码

    第四题:.此题要求用IO流完成 使用File类在D盘下创建目录myFiles, 并在myFiles目录下创建三个文件分别为:info1.txt, info2.txt, info3.txt . 代码: ...

  2. 阿里Java架构师面试高频300题:集合+JVM+Redis+并发+算法+框架等

    前言 在过2个月即将进入9月了,然而面对今年的大环境而言,跳槽成功的难度比往年高了很多,很明显的感受就是:对于今年的java开发朋友跳槽面试,无论一面还是二面,都开始考验一个Java程序员的技术功底和 ...

  3. JS循环+循环嵌套+经典例题+图形题

    首先,了解一下循环嵌套的特点:外层循环转一次,内层循环转一圈. 在上一篇随笔中详细介绍了JS中的分支结构和循环结构,我们来简单的回顾一下For循环结构: 1.for循环有三个表达式,分别为: ①定义循 ...

  4. 2019 年 Java 最新面试指南共 80 题,赶快收藏起来吧!

    2019 年 Java 最新面试指南共 80 题,赶快收藏起来吧! http://blog.zh66.club/index.php/archives/116/

  5. Java程序设计(2021春)——第一章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第一章课后题(选择题+编程题)答案与详解 第一章选择题 1.1 Java与面向对象程 ...

  6. Java程序设计(2021春)——第二章课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第二章课后题(选择题+编程题)答案与详解 第二章选择题 2.1 面向对象方法的特性 ...

  7. Java程序设计(2021春)——第四章接口与多态课后题(选择题+编程题)答案与详解

    Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 目录 Java程序设计(2021春)--第四章接口与多态课后题(选择题+编程题)答案与详解 第四章选择题 4.0 ...

  8. java面试题汇总(有的题无视即可,没什么实际用途)

    相关概念 面向对象的三个特征 封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消 ...

  9. 黄金连分数|2013年蓝桥杯B组题解析第四题-fishers

    黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现.有时需要把这个数字求得很精确. 对于某些精密工程,常数的精度很重要.也许你听说过哈勃太空望远镜,它首次 ...

随机推荐

  1. 启用了不安全的HTTP方法【转】

    安全风险:       可能会在Web 服务器上上载.修改或删除Web 页面.脚本和文件. 可能原因:       Web 服务器或应用程序服务器是以不安全的方式配置的. 修订建议:       如果 ...

  2. HBase针对性问题汇总

    Q:    Hbase的rk设计,Hbase优化  a\rowkey:hbase三维存储中的关键(rowkey:行键 ,columnKey(family+quilaty):列键  ,timestamp ...

  3. CentOS7.5 防火墙指令

    防火墙指令 1. 查看防火墙状态: firewall-cmd --state 2. 启动防火墙 systemctl start firewalld.service 3. 关闭防火墙 systemctl ...

  4. 笔记 : win8系统中的VM虚拟机的Ubuntu搭建samba服务

    1. 环境准备 (此处使用root超级管理员帐户,执行命令时不用加sudo, 普通帐户需要前面加sudo):  (1)安装好Ubutun虚拟系统后,Ubuntu 的软件源配置文件是 /etc/apt/ ...

  5. 初识Vue,简单的todolist

    vue开发源码:https://vuejs.org/js/vue.js todolist代码: <!DOCTYPE html> <html lang="en"&g ...

  6. 如何删除WINDOWS中服务中不再使用的服务?

    右键选择那个不需要的服务,点击属性,看到"服务名",拷贝下来 然后通过管理员的方式进入到控制台,输入 sc delete "你刚才拷贝的服务名" ,就行了,注意 ...

  7. Oracle创建禁止DDL的触发器

    create or replace trigger forbid_ddl       before ddl on DATABASEbegin  --if ora_dict_obj_owner = or ...

  8. mysql 知识

    1.  数据库事务的四个特性及含义 数据库事务transanction正确执行的四个基本要素.ACID,原子性(Atomicity).一致性(Correspondence).隔离性(Isolation ...

  9. Vue系列之 => 使用第三方animated.css动画

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Codeforces Round #319 (Div. 2) D

    E A tree of size n is an undirected connected graph consisting of n vertices without cycles. Conside ...