因为此处是BST树,所以中序遍历是升序的有序遍历,所遍历的第k个节点即是目标节点。
此是对二叉树遍历的一点复习吧。
void middleTraverse(TreeNode *root, int k, int &count, int &val) {
if(count > k || nullptr == root)
return;
middleTraverse(root->left, k, count, val);
if(++count == k) {
val = root->val;
return;
}
middleTraverse(root->right, k, count, val);
}
int kthSmallest(TreeNode* root, int k) {
int count = 0, val = 0;
middleTraverse(root, k, count, val);
return val;
}