zoukankan      html  css  js  c++  java
  • 501. 二叉搜索树中的众数

    2020-09-04
    501. 二叉搜索树中的众数
    题解:
    思路1:递归
     
    /**
     * Definition for a binary tree node.
     * function TreeNode(val) {
     *     this.val = val;
     *     this.left = this.right = null;
     * }
     */
    /**
     * @param {TreeNode} root
     * @return {number[]}
     */
    var findMode = function (root) {
      // val 当前计算出现次数的值
      // times 当前计算值出现的次数
      // maxTimes 出现过最多的次数
      if (!root) return [];
      let ans = [], val = null, times = 1, maxTimes = -1;
      let fn = (node) => {
        if (!node) return; // 二叉树的前序遍历 从小到大遍历二叉树
        fn(node.left);
        if (val === null) val = node.val; // 遍历到最小值时 val是null 先赋值
        else { // val有值后说明已经不是最小值了 要进行是否相等的比较
          if (val === node.val) times++; // 如果相等 出现次数+1
          else if (times > maxTimes) { // 如果当前比较的val与当前节点的值不同 且val出现次数已经大于原先的最大次数
            maxTimes = times; // maxTimes重新赋值
            ans = [val]; // ans 清空后放入val
            val = node.val; // val重新赋值当前节点值 进入下一个数值的计数
            times = 1; // val出现次数变为1
          } else if (times === maxTimes) { // 如果当前的val与当前节点的值不同 且val出现次数等于原先的最大次数
            ans.push(val); // 说明出现了相同次数的值 push 入ans中
            val = node.val; // val重新赋值当前节点进入下一次计数
            times = 1; // val出现次数重新赋值为1
          } else { // 如果当前val值与当前节点值不同 且val次数小于原来的最大次数 可以不做处理
            times = 1;
            val = node.val; // val重新赋值当前节点进入下一次计数
          } 
        }
        fn(node.right);
      }
      fn(root);
      if (times > maxTimes) ans = [val]; // 遍历结束后 最后一次的val有可能会漏掉 要特殊处理
      else if (times === maxTimes) ans.push(val);
      return ans;
    };
  • 相关阅读:
    性能优化方法
    awk命令
    jvm 性能调优工具之 jmap
    linux下tomcat 8的安装以及tomcat启动慢问题
    解析Java中的String、StringBuilder、StringBuffer类(一)
    JDBC详解系列(四)之建立Stament和执行SQL语句
    JDBC详解系列(三)之建立连接(DriverManager.getConnection)
    Paho -物联网 MQTT C Cient的实现和详解
    Paho
    Subscription wildcards(MQTT)
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/13613377.html
Copyright © 2011-2022 走看看