• 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;
    };
  • 相关阅读:
    The file 'MemoryStream' is corrupted! 的解决办法
    U3D包大小优化之microlib
    U3D中IOS平台泛型方法尽少使用
    {转}Unity3d+Jenkins 自动编译iOS、Android版本(U3D远程自动打包工具)
    Unity Remote 4安卓机使用指南
    2dtoolkit获取sprite像素大小的方法
    国行手机安装GOOGLE PLAY
    手机网络上YOUTUBE用fqrouter2~~
    U3D4.X版本无法安装MONODEV编辑器
    UNITY3D在IOS开发下的反射机制限制
  • 原文地址:https://www.cnblogs.com/lanpang9661/p/13613377.html
Copyright © 2020-2023  润新知