方法

    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. int i=0;
    15. int temp;
    16. int kthSmallest(TreeNode* root, int k) {
    17. if(root==nullptr){
    18. return 0;
    19. }
    20. kthSmallest(root->left,k);
    21. i++;
    22. if(i==k){
    23. temp=root->val;
    24. }
    25. kthSmallest(root->right,k);
    26. return temp;
    27. }
    28. };
    1. /**
    2. * Definition for a binary tree node.
    3. * struct TreeNode {
    4. * int val;
    5. * TreeNode *left;
    6. * TreeNode *right;
    7. * TreeNode() : val(0), left(nullptr), right(nullptr) {}
    8. * TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
    9. * TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
    10. * };
    11. */
    12. class Solution {
    13. public:
    14. int kthSmallest(TreeNode* head, int k) {
    15. stack<TreeNode*>s;
    16. while(!s.empty()||head!=nullptr){
    17. if(head){
    18. s.emplace(head);
    19. head=head->left;
    20. }else{
    21. head=s.top();
    22. s.pop();
    23. k--;
    24. if(k==0){
    25. return head->val;
    26. break;
    27. }
    28. head=head->right;
    29. }
    30. }
    31. return 0;
    32. }
    33. };