题目
给定一棵二叉搜索树,请找出其中的第k小的结点。
你可以假设树和k都存在,并且1≤k≤树的总结点数。
样例
输入:root = [2, 1, 3, null, null, null, null] ,k = 3
2
/ \
1 3
输出:3

解法:中序遍历

时间复杂度O(n),空间复杂度O(1)

  1. /**
  2. * Definition for a binary tree node.
  3. * struct TreeNode {
  4. * int val;
  5. * TreeNode *left;
  6. * TreeNode *right;
  7. * TreeNode(int x) : val(x), left(NULL), right(NULL) {}
  8. * };
  9. */
  10. class Solution {
  11. public:
  12. TreeNode *ans;
  13. TreeNode* kthNode(TreeNode* root, int k) {
  14. dfs(root, k);
  15. return ans;
  16. }
  17. void dfs(TreeNode *u, int &k) {
  18. if (!k || !u) return;
  19. dfs(u->left, k);
  20. k--;
  21. if (!k) ans = u;
  22. else dfs(u->right, k);
  23. }
  24. };