剑指offer 面试题. 二叉搜索树的第k个结点

题目描述

给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。
 
 
解:

由于二叉搜索树的中序遍历是升序,所以在中序基础上添加计数器即可。

 1 class Solution {
 2 public:
 3     TreeNode* KthNode(TreeNode* pRoot, int k)
 4     {
 5         int i=INT32_MIN;
 6         return func(pRoot,k,i);
 7     }
 8     TreeNode* func(TreeNode* node,int k,int& i){
 9         if(node==nullptr){
10             if(i==INT32_MIN){
11                 i=0;
12             }
13             return nullptr;
14         }
15         decltype(node) t;
16         if(t=func(node->left,k,i)){
17             return t;
18         }
19         ++i;
20         if(i==k){
21             return node;
22         }
23         if(t=func(node->right,k,i)){
24             return t;
25         }
26         return nullptr;
27     }
28 };

 

你可能感兴趣的:(剑指offer 面试题. 二叉搜索树的第k个结点)