【剑指offer】二叉搜索树的第k个结点
题目链接:二叉搜索树的第k个结点
题意:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8) 中,按结点数值大小顺序第三小结点的值为4。
题解:之前有讲过BST的性质,中序遍历就可以得到一个递增的序列。也就是第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 cnt = 0; 14 TreeNode* KthNode(TreeNode* pRoot, int k){ 15 if(pRoot == NULL || k <= 0) return NULL; 16 //中序遍历 17 TreeNode* node = KthNode(pRoot->left,k); //左子树找 18 if(node) return node; //左子树中找到 19 if(++cnt == k) return pRoot; //根结点 20 node = KthNode(pRoot->right,k); //右子树找 21 if(node) return node;//右子树找到 22 } 23 24 25 };