题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路:中序遍历
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 void DFS(TreeNode *pRoot, int &k, TreeNode **pres) 14 { 15 if(pRoot->left && k)DFS(pRoot->left, k, pres); 16 --k; 17 if(k==0) 18 { 19 *pres=pRoot; 20 return; 21 } 22 if(pRoot->right && k)DFS(pRoot->right, k, pres); 23 } 24 TreeNode* KthNode(TreeNode* pRoot, int k) 25 { 26 if(pRoot==NULL || k<=0)return NULL; 27 TreeNode *res=NULL; 28 DFS(pRoot, k, &res); 29 return res; 30 } 31 32 33 };