LeetCode230. 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.

Example 1:

Input: root = [3,1,4,null,2], k = 1
   3
  / \
 1   4
  \
   2
Output: 1

Example 2:

Input: root = [5,3,6,2,4,null,null,1], k = 3
       5
      / \
     3   6
    / \
   2   4
  /
 1
Output: 3

Follow up:
What if the BST is modified (insert/delete operations) often and you need to find the kth smallest frequently? How would you optimize the kthSmallest routine?

思路:

这道题本质上就是遍历一个搜索二叉树,同样有不同的解法,常见的是递归解法和迭代解法;其中迭代解法需要注意迭代的转移条件。

递归解法:

class Solution {
public:
    int kthSmallest(TreeNode* root, int k) {
		stack<TreeNode*> s;
		while (!s.empty() || root) {
			if (root) {
				s.push(root);
				root = root->left;
			}
			else {
                root = s.top(); s.pop();
				if (--k == 0) return root->val;
				root = root->right;
			}
		}
        return 0;
    }
};

迭代解法:

class Solution {
public:
    int kthSmallest(TreeNode* root, int k) {
		stack<TreeNode*> s;
		while (!s.empty() || root) {
			if (root) {
				s.push(root);
				root = root->left;
			}
			else {
                root = s.top(); s.pop();
				if (--k == 0) return root->val;
				root = root->right;
			}
		}
        return 0;
    }
};

猜你喜欢

转载自blog.csdn.net/m0_37518259/article/details/89784783