이진 검색 트리와 값 K가 입력으로 있다고 가정하면 트리에서 K 번째로 작은 요소를 찾아야 합니다.
따라서 입력이 다음과 같으면
k =3이면 출력은 15가 됩니다.
이 문제를 해결하기 위해 다음 단계를 따릅니다. −
-
find_kth_smallest() 함수를 정의합니다. 이것은 root, count, k,
를 취합니다. -
루트가 NULL이면 -
-
NULL 반환
-
-
left =find_kth_smallest(루트의 왼쪽, 개수, k)
-
왼쪽이 NULL이 아니면 -
-
왼쪽으로 돌아가기
-
-
(1씩 증가)
-
count가 k와 같으면 -
-
루트 반환
-
-
return find_kth_smallest(루트의 오른쪽, 개수, k)
-
기본 방법에서 다음을 수행하십시오 -
-
개수 :=0
-
res =find_kth_smallest(루트, 개수, k)
-
res가 NULL이면 -
-
디스플레이를 찾을 수 없음
-
-
그렇지 않으면
-
res의 표시 값
-
예시(C++)
이해를 돕기 위해 다음 구현을 살펴보겠습니다. −
#include <iostream> using namespace std; struct TreeNode { int val; TreeNode *left, *right; TreeNode(int x) { val = x; left = right = NULL; } }; TreeNode* find_kth_smallest(TreeNode* root, int &count, int k) { if (root == NULL) return NULL; TreeNode* left = find_kth_smallest(root->left, count, k); if (left != NULL) return left; count++; if (count == k) return root; return find_kth_smallest(root->right, count, k); } void kth_smallest(TreeNode* root, int k) { int count = 0; TreeNode* res = find_kth_smallest(root, count, k); if (res == NULL) cout << "Not found"; else cout << res->val; } int main() { TreeNode* root = new TreeNode(25); root->left = new TreeNode(13); root->right = new TreeNode(27); root->left->left = new TreeNode(9); root->left->right = new TreeNode(17); root->left->right->left = new TreeNode(15); root->left->right->right = new TreeNode(19); int k = 3; kth_smallest(root, k); }
입력
TreeNode* root = new TreeNode(25); root->left = new TreeNode(13); root->right = new TreeNode(27); root->left->left = new TreeNode(9); root->left->right = new TreeNode(17); root- >left->right->left = new TreeNode(15); root->left->right->right = new TreeNode(19); k = 3
출력
15