二叉搜索树中第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];
};

 

原文地址:https://www.cnblogs.com/peekapoooo/p/14327998.html