二叉搜索树的第K个节点

 1 /*
 2 struct TreeNode {
 3     int val;
 4     struct TreeNode *left;
 5     struct TreeNode *right;
 6     TreeNode(int x) :
 7             val(x), left(NULL), right(NULL) {
 8     }
 9 };
10 */
11 class Solution {
12 public:
13     stack<TreeNode*>node;
14     TreeNode* KthNode(TreeNode* pRoot, unsigned int k)
15     {
16         if(pRoot == NULL||k<=0)
17             return NULL;
18         node.push(pRoot);
19         TreeNode *p = NULL;
20         while(!node.empty())
21         {
22             while(pRoot->left != NULL)
23             {
24                   pRoot=pRoot->left;
25                   node.push(pRoot);
26             }
27             while(!node.empty())
28             {
29                  p = node.top();
30                  node.pop();
31                   --k;
32                  if(k == 0)
33                      return p;
34                  if(p->right !=NULL)
35                  {
36                       node.push(p->right);
37                       pRoot = p->right;
38                       break;
39                   }
40             }
41             
42         }
43         
44         return NULL;
45     }
46 
47     
48 };
原文地址:https://www.cnblogs.com/daocaorenblog/p/5470474.html