二叉搜索树的第k个结点
题目描述
给定一颗二叉搜索树,请找出其中的第k小的结点。例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4。
思路:二叉搜索树就是二叉排序树,也叫二叉查找树。
其中序遍历就是顺序的。
我的代码:
TreeNode* KthNode(TreeNode* pRoot, int k) { if(pRoot == NULL || k == 0) return NULL; return KthNodeCore(pRoot,k); } TreeNode* KthNodeCore(TreeNode* pRoot , int& k) { TreeNode* target = NULL; if(pRoot->left) { target = KthNodeCore(pRoot->left , k); } if(target == NULL) { if(k == 1) target = pRoot; k--; } if(target == NULL && pRoot->right) target = KthNodeCore(pRoot->right , k); return target; }