剑指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 };
进击的小🐴农