二叉搜索树的第K个结点
题目描述
给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
思路:
中序遍历二叉搜索树,就能得到顺序数列,所以先中序遍历二叉树,存储在vector中,然后返回第K-1元素。
代码如下:
/* struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { } }; */ class Solution { public: void mid(TreeNode * pRoot, vector<TreeNode *> & vec) { if(pRoot==NULL) return; mid(pRoot->left,vec); vec.push_back(pRoot); mid(pRoot->right,vec); } TreeNode* KthNode(TreeNode* pRoot, int k) { if(pRoot==NULL||k==0) return NULL; vector<TreeNode *> vec; mid(pRoot,vec); int i=0; if(vec.size()<k) return NULL; return vec[k-1]; } };