230. Kth Smallest Element in a BST 难度:medium

来源:互联网 发布:万网域名管理平台入口 编辑:程序博客网 时间:2024/05/22 07:56

题目:

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、计算左子树元素个数left。

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

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

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


程序:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    int calcTreeSize(TreeNode* root){          if (root == NULL)              return 0;          return 1+calcTreeSize(root->left) + calcTreeSize(root->right);              }          int kthSmallest(TreeNode* root, int k) {          if (root == NULL)              return 0;          int leftSize = calcTreeSize(root->left);          if (k == leftSize+1){              return root->val;          }else if (leftSize >= k){              return kthSmallest(root->left,k);          }else{              return kthSmallest(root->right, k-leftSize-1);          }      }  };




0 0
原创粉丝点击