Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit b55babc

Browse files
Kth bst
Signed-off-by: begeekmyfriend <begeekmyfriend@gmail.com>
1 parent 383370d commit b55babc

File tree

2 files changed

+85
-0
lines changed

2 files changed

+85
-0
lines changed
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
all:
2+
gcc -O2 -o test kth_bst.c
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <stdbool.h>
4+
5+
struct TreeNode {
6+
int val;
7+
struct TreeNode *left;
8+
struct TreeNode *right;
9+
};
10+
11+
static bool traverse(struct TreeNode *node, int *k, int *val)
12+
{
13+
if (node == NULL) {
14+
return false;
15+
}
16+
if (traverse(node->left, k, val)) {
17+
return true;
18+
}
19+
if (--*k == 0) {
20+
*val = node->val;
21+
return true;
22+
}
23+
if (traverse(node->right, k, val)) {
24+
return true;
25+
}
26+
return false;
27+
}
28+
29+
static int kthSmallest(struct TreeNode* root, int k)
30+
{
31+
int value = 0;
32+
traverse(root, &k, &value);
33+
return value;
34+
}
35+
36+
int main(void)
37+
{
38+
#if 1
39+
struct TreeNode root, n10, n11, n20, n21, n22, n23;
40+
root.val = 1;
41+
n10.val = 2;
42+
n11.val = 2;
43+
n20.val = 3;
44+
n21.val = 4;
45+
n22.val = 4;
46+
n23.val = 3;
47+
root.left = &n10;
48+
root.right = &n11;
49+
n10.left = &n20;
50+
n10.right = &n21;
51+
n11.left = &n22;
52+
n11.right = &n23;
53+
n20.left = NULL;
54+
n20.right = NULL;
55+
n21.left = NULL;
56+
n21.right = NULL;
57+
n22.left = NULL;
58+
n22.right = NULL;
59+
n23.left = NULL;
60+
n23.right = NULL;
61+
#else
62+
struct TreeNode root, n10, n11, n21, n22;
63+
root.val = 1;
64+
n10.val = 2;
65+
n11.val = 2;
66+
n21.val = 3;
67+
n22.val = 4;
68+
root.left = &n10;
69+
root.right = &n11;
70+
n10.left = NULL;
71+
n10.right = &n21;
72+
n11.left = &n22;
73+
n11.right = NULL;
74+
n21.left = NULL;
75+
n21.right = NULL;
76+
n22.left = NULL;
77+
n22.right = NULL;
78+
#endif
79+
80+
int k = 1;
81+
printf("%d\n", kthSmallest(&root, k));
82+
return 0;
83+
}

0 commit comments

Comments
 (0)