【树】Kth Smallest Element in a BST(递归)

题目:

Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.

Note: 
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.

思路:

1、计算左子树元素个数leftSize。

2、 leftSize+1 = K,则根节点即为第K个元素

     leftSize >=k, 则第K个元素在左子树中,

     leftSize +1 <k, 则转换为在右子树中,寻找第K-left-1元素。

/**
 * Definition for a binary tree node.
 * function TreeNode(val) {
 *     this.val = val;
 *     this.left = this.right = null;
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} k
 * @return {number}
 */
var kthSmallest = function(root, k) {
    if(root==null){
        return 0;
    }
    var leftSize=nodeNum(root.left);
    
    if(k==leftSize+1){
        return root.val;
    }else if(k<leftSize+1){
        return kthSmallest(root.left,k);
    }else{
        return kthSmallest(root.right,k-leftSize-1);
    }
};

function nodeNum(root){
    if(root==null){
        return 0;
    }else{
        return 1+nodeNum(root.left)+nodeNum(root.right);
    }
}

 

posted @ 2016-01-29 14:58  很好玩  阅读(198)  评论(0编辑  收藏  举报