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;
    };
  • 相关阅读:
    Scala Ant Tasks
    Git挂钩
    读写文件
    DC10用CSS定位控制网页布局
    table设置colspan属性,列宽显示错位解决方法
    ATM和购物商城-错题集
    python 函数参数多种传递方法
    python 函数 初学
    python 集合 gather
    元组 字体高亮 购物车练习
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/13613377.html
Copyright © 2011-2022 走看看