[Leetcode230]二叉搜尋樹中第K小的元素
阿新 • • 發佈:2018-11-27
給定一個二叉搜尋樹,編寫一個函式 kthSmallest
來查詢其中第 k 個最小的元素。
還是那句話,樹,優先考慮遞迴。
python:
# Definition for a binary tree node. # class TreeNode(object): # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution(object): def kthSmallest(self, root, k): """ :type root: TreeNode :type k: int :rtype: int """ if root == None: return None lsize = self.count(root.left) if lsize + 1 == k: return root.val elif lsize + 1 < k: return self.kthSmallest(root.right,k - lsize - 1) else: return self.kthSmallest(root.left,k) def count(self,root): if root == None: return 0 return 1 + self.count(root.left) + self.count(root.right)
C++:
/** * 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 kthSmallest(TreeNode* root, int k) { if(root == NULL) return NULL; int lsize = count(root->left); if(lsize + 1 == k) return root->val; else if(lsize + 1 < k){ return kthSmallest(root->right,k - lsize -1); } else{ return kthSmallest(root->left,k); } } int count(TreeNode* root){ if(root == NULL) return 0; return 1 + count(root->left) + count(root->right); } };