Skip to content

Commit 3e181f7

Browse files
author
sam41290
committed
kth smallest in bst
1 parent 5d02802 commit 3e181f7

File tree

5 files changed

+258
-0
lines changed

5 files changed

+258
-0
lines changed

convert_sorted_array_to_BST.cpp

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
TreeNode* sortedArrayToBST(vector<int>& nums) {
13+
14+
int n=nums.size();
15+
TreeNode *root;
16+
if(n==0)
17+
return NULL;
18+
if(n==1)
19+
{
20+
root = new TreeNode(nums[0]);
21+
return root;
22+
}
23+
else
24+
{
25+
int mid = n/2;
26+
root = new TreeNode(nums[mid]);
27+
vector<int> vec_left(nums.begin(),nums.begin() + mid);
28+
vector<int> vec_right(nums.begin() + mid + 1,nums.end());
29+
root->left=sortedArrayToBST(vec_left);
30+
root->right=sortedArrayToBST(vec_right);
31+
}
32+
return root;
33+
}
34+
};

inorder_traversal_iterative.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
vector<int> inorderTraversal(TreeNode* root) {
13+
vector<int> ret;
14+
vector<TreeNode *> stack;
15+
if(root == NULL)
16+
return ret;
17+
TreeNode *current=root;
18+
int top=-1;
19+
while(current!=NULL)
20+
{
21+
stack.push_back(current);
22+
top++;
23+
if(current->left==NULL)
24+
{
25+
//ret.push_back(current->val);
26+
while(top>=0)
27+
{
28+
current = stack[top];
29+
top--;
30+
stack.pop_back();
31+
ret.push_back(current->val);
32+
if(current->right != NULL)
33+
{
34+
break;
35+
}
36+
}
37+
current=current->right;
38+
continue;
39+
40+
}
41+
current=current->left;
42+
43+
}
44+
return ret;
45+
}
46+
};

kth_smallest_in_bst.cpp

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
Given a binary search tree, write a function kthSmallest to find the kth smallest element in it.
3+
4+
Note:
5+
You may assume k is always valid, 1 ≤ k ≤ BST's total elements.
6+
*/
7+
8+
9+
/**
10+
* Definition for a binary tree node.
11+
* struct TreeNode {
12+
* int val;
13+
* TreeNode *left;
14+
* TreeNode *right;
15+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
16+
* };
17+
*/
18+
class Solution {
19+
public:
20+
int kthSmallest(TreeNode* root, int k) {
21+
vector<int> ret;
22+
vector<TreeNode *> stack;
23+
TreeNode *current=root;
24+
int top=-1;
25+
while(current!=NULL)
26+
{
27+
stack.push_back(current);
28+
top++;
29+
if(current->left==NULL)
30+
{
31+
//ret.push_back(current->val);
32+
while(top>=0)
33+
{
34+
current = stack[top];
35+
top--;
36+
stack.pop_back();
37+
ret.push_back(current->val);
38+
if(current->right != NULL)
39+
{
40+
break;
41+
}
42+
}
43+
current=current->right;
44+
continue;
45+
46+
}
47+
current=current->left;
48+
49+
}
50+
return ret[k-1];
51+
}
52+
};

maximum_depth_of_binary_tree.cpp

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
/**
2+
* Definition for a binary tree node.
3+
* struct TreeNode {
4+
* int val;
5+
* TreeNode *left;
6+
* TreeNode *right;
7+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
8+
* };
9+
*/
10+
class Solution {
11+
public:
12+
13+
int max_depth = 0;
14+
15+
void dfs(TreeNode *node,int depth)
16+
{
17+
if(depth > max_depth)
18+
max_depth = depth;
19+
if(node->left!=NULL)
20+
dfs(node->left,depth + 1);
21+
if(node->right!=NULL)
22+
dfs(node->right,depth + 1);
23+
return;
24+
}
25+
26+
int maxDepth(TreeNode* root) {
27+
if(root!=NULL)
28+
dfs(root,1);
29+
return max_depth;
30+
}
31+
};

symmetric_tree.cpp

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
/*
2+
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center).
3+
4+
For example, this binary tree [1,2,2,3,4,4,3] is symmetric:
5+
6+
1
7+
/ \
8+
2 2
9+
/ \ / \
10+
3 4 4 3
11+
But the following [1,2,2,null,3,null,3] is not:
12+
1
13+
/ \
14+
2 2
15+
\ \
16+
3 3
17+
*/
18+
19+
20+
21+
/**
22+
* Definition for a binary tree node.
23+
* struct TreeNode {
24+
* int val;
25+
* TreeNode *left;
26+
* TreeNode *right;
27+
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
28+
* };
29+
*/
30+
class Solution {
31+
public:
32+
33+
bool isSymmetric(TreeNode* root) {
34+
35+
if(root == NULL)
36+
return true;
37+
38+
bool ret = true;
39+
40+
vector<TreeNode *> fringe;
41+
fringe.push_back(root);
42+
int depth = 0;
43+
int next_itr=1;
44+
int fringe_pos = 0;
45+
while(next_itr!=0)
46+
{
47+
int i = next_itr;
48+
int k = fringe_pos + i - 1;
49+
next_itr = 0;
50+
if(i==1)
51+
{
52+
TreeNode *tmp = fringe[fringe_pos];
53+
fringe.push_back(tmp->left);
54+
next_itr++;
55+
fringe.push_back(tmp->right);
56+
next_itr++;
57+
fringe_pos++;
58+
}
59+
else
60+
{
61+
int mid = i/2;
62+
63+
for(int j=0;j<i;j++)
64+
{
65+
TreeNode *tmp = fringe[fringe_pos];
66+
if(tmp!=NULL)
67+
{
68+
fringe.push_back(tmp->left);
69+
next_itr++;
70+
fringe.push_back(tmp->right);
71+
next_itr++;
72+
}
73+
if(j<mid)
74+
{
75+
TreeNode *tmp2 = fringe[k];
76+
if(tmp == NULL && tmp2!=NULL)
77+
return false;
78+
else if(tmp2 == NULL && tmp!=NULL)
79+
return false;
80+
else if(tmp!=NULL && tmp2!=NULL)
81+
{
82+
if(tmp->val != tmp2->val)
83+
return false;
84+
}
85+
k--;
86+
}
87+
fringe_pos++;
88+
}
89+
90+
}
91+
92+
}
93+
return ret;
94+
}
95+
};

0 commit comments

Comments
 (0)