剑指offer-二叉搜索树的第k个结点
题目描述
给定一颗二叉搜索树,请找出其中的第k大的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
解题思路
二叉搜索树按照从小到大顺序输出的话正好是左子节点->根结点->右子节点这样的顺序,所以找到第k大的结点就是对二叉搜索树进行中序遍历,从第一个遍历到的节点开始计数,直到遍历到第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 int k1=0; 14 TreeNode* KthNode(TreeNode* pRoot, int k) 15 { 16 if(!pRoot) 17 return NULL; 18 TreeNode *res=NULL; 19 if(pRoot->left) 20 res=KthNode(pRoot->left,k); 21 k1++; 22 if(k1==k) 23 return pRoot; 24 if(res==NULL&&pRoot->right) 25 res=KthNode(pRoot->right,k); 26 return res; 27 } 28 };