题解 | #二叉搜索树的第k个结点#
二叉搜索树的第k个结点
http://www.nowcoder.com/practice/ef068f602dde4d28aab2b210e859150a
C++ 思路:
① 先中序存一下数据,目的是为了达到排序的效果;
② 找到第K小的之后,遍历找到该节点。
class Solution { public: //中序存一下数据,搜索树中序遍历可以得到单调递增的数据 void midTreeVal(vector<int> &vec, TreeNode* pRoot) { if(nullptr == pRoot) return; midTreeVal(vec, pRoot->left); vec.push_back(pRoot->val); midTreeVal(vec, pRoot->right); } //找到第K个节点 TreeNode* findTheNode(TreeNode* pRoot, int m,TreeNode* &ans) { if(nullptr == pRoot) return nullptr; findTheNode(pRoot->left,m,ans); if(pRoot->val == m) ans = pRoot; findTheNode(pRoot->right,m,ans); return pRoot; } TreeNode* KthNode(TreeNode* pRoot, int k) { if(pRoot == nullptr || k == 0) return nullptr; TreeNode* ans = nullptr; vector<int> vec; midTreeVal(vec, pRoot); findTheNode(pRoot, vec[k-1],ans); return ans; } };