zoukankan      html  css  js  c++  java
  • 二叉搜索树中第K小的元素

    二叉搜索树中第K小的元素

    【迭代】

    k总是有效的,当k===元素个数时,再最后一次res.push(root.val);后,就不再进入while循环了,因此有两个出口。

    /**
    * Definition for a binary tree node.
    * function TreeNode(val, left, right) {
    *     this.val = (val===undefined ? 0 : val)
    *     this.left = (left===undefined ? null : left)
    *     this.right = (right===undefined ? null : right)
    * }
    */
    /**
    * @param {TreeNode} root
    * @param {number} k
    * @return {number}
    */
    var kthSmallest = function(root, k) {
       let res = [];
       let stack = [];
       if(!root)
           return [];
       while(root !== null || stack.length > 0){
           if(res.length === k) break;
           while(root !== null){
               stack.push(root);
               root = root.left;
          }
           root = stack.pop();
           res.push(root.val);
           root = root.right
      }
       return res.pop();
    };

    【递归】

    就把顺序全部求出来后,再取下标为k-1的元素返回。

    var kthSmallest = function(root, k) {
       const res = [];
       const inOrderTraversalNode = (node) => {
           if(node.left)
               inOrderTraversalNode(node.left);
           res.push(node.val);
           if(node.right)
               inOrderTraversalNode(node.right);
      }
      inOrderTraversalNode(root);
      return res[k-1];
    };

     

  • 相关阅读:
    [ZJOI2014]力
    [八省联考2018]劈配
    [APIO2007]动物园
    [九省联考2018]IIIDX
    [HAOI2015]树上染色
    [SHOI2008]堵塞的交通
    暑假第五周
    暑假第四周
    暑假第三周
    暑假第二周
  • 原文地址:https://www.cnblogs.com/peekapoooo/p/14327998.html
Copyright © 2011-2022 走看看