[剑指Offer] 62.二叉搜索树的第k个结点
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
【思路】遍历二叉搜索树,存入一个vector中,对该vector排序,返回第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 vector<TreeNode*> vec; 14 static bool cmp(TreeNode* p,TreeNode* q) 15 { 16 return p->val < q->val; 17 } 18 void addVec(TreeNode* pRoot) 19 { 20 if(pRoot){ 21 vec.push_back(pRoot); 22 addVec(pRoot->left); 23 addVec(pRoot->right); 24 } 25 } 26 TreeNode* KthNode(TreeNode* pRoot, int k) 27 { 28 if(pRoot == NULL || k < 1) 29 return NULL; 30 addVec(pRoot); 31 sort(vec.begin(),vec.end(),cmp); 32 if(k > vec.size()) 33 return NULL; 34 return vec[k - 1]; 35 } 36 37 38 };