diff --git a/README.md b/README.md
index c1a3374a..37708c9e 100644
--- a/README.md
+++ b/README.md
@@ -37,7 +37,12 @@ Collection of interview questions with Unit Tests. Problems includes Data Struct
- [Doubly Linked List](src/_DataStructures_/DoublyLinkedList)
- [Trees](src/_DataStructures_/Trees)
- - [Binary Search Tree](src/_DataStructures_/Trees/BST)
+ - [Binary Search Tree](src/_DataStructures_/Trees/BinarySearchTree)
+ - [Find kth maximum in a BinarySearchTree](src/_DataStructures_/Trees/BinarySearchTree/find-kth-max)
+ - [Find kth minimum in a BinarySearchTree](src/_DataStructures_/Trees/BinarySearchTree/find-kth-min)
+ - [Find Ancestors of a Node](src/_DataStructures_/Trees/BinarySearchTree/find-ancestors)
+ - [Find Height of BST](src/_DataStructures_/Trees/BinarySearchTree/height-of-bst)
+ - [Find k Nodes from Root of BST](src/_DataStructures_/Trees/BinarySearchTree/find-k-nodes-from-root)
- [Suffix Tree](src/_DataStructures_/SuffixTree)
### Logical Problems
diff --git a/src/_DataStructures_/Trees/BST/Node.js b/src/_DataStructures_/Trees/BinarySearchTree/Node.js
similarity index 100%
rename from src/_DataStructures_/Trees/BST/Node.js
rename to src/_DataStructures_/Trees/BinarySearchTree/Node.js
diff --git a/src/_DataStructures_/Trees/BinarySearchTree/find-ancestors/index.js b/src/_DataStructures_/Trees/BinarySearchTree/find-ancestors/index.js
new file mode 100644
index 00000000..4ccea5f9
--- /dev/null
+++ b/src/_DataStructures_/Trees/BinarySearchTree/find-ancestors/index.js
@@ -0,0 +1,49 @@
+// eslint-disable-next-line no-unused-vars
+const BST = require('../index');
+
+/** You should go through this conversation here:
+ * https://github.com/knaxus/problem-solving-javascript/pull/63
+ */
+
+function findAncestors(root, value) {
+ /**
+ * search the given node and meanwhile
+ * keep pushing the visited nodes
+ */
+ if (root === null) return false;
+
+ if (value < root.value) {
+ const left = findAncestors(root.leftChild, value);
+ if (left) {
+ return [...left, root.value];
+ }
+ return false;
+ }
+
+ if (value > root.value) {
+ const right = findAncestors(root.rightChild, value);
+ if (right) {
+ return [...right, root.value];
+ }
+ return false;
+ }
+
+ if (value === root.value) return [];
+ return false;
+}
+
+// create a BST
+// const myBST = new BST(6);
+// myBST.add(4);
+// myBST.add(9);
+// myBST.add(2);
+// myBST.add(5);
+// myBST.add(14);
+// myBST.add(8);
+// myBST.add(12);
+// myBST.add(10);
+
+// console.log(findAncestors(myBST.root, 10));
+// console.log(findAncestors(myBST.root, 101));
+
+module.exports = findAncestors;
diff --git a/src/_DataStructures_/Trees/BinarySearchTree/find-k-nodes-from-root/index.js b/src/_DataStructures_/Trees/BinarySearchTree/find-k-nodes-from-root/index.js
new file mode 100644
index 00000000..25aa70d1
--- /dev/null
+++ b/src/_DataStructures_/Trees/BinarySearchTree/find-k-nodes-from-root/index.js
@@ -0,0 +1,33 @@
+// eslint-disable-next-line no-unused-vars
+const BST = require('../index');
+
+function findKNodes(root, k) {
+ let arr = [];
+
+ if (root === null) return [];
+ if (k === 0) return [...arr, root.value];
+
+ const left = findKNodes(root.leftChild, k - 1);
+ arr = [...arr, ...left];
+
+ const right = findKNodes(root.rightChild, k - 1);
+ arr = [...arr, ...right];
+ return arr;
+}
+
+// create a BST
+// const myBST = new BST(6);
+
+// myBST.add(2);
+// myBST.add(19);
+// myBST.add(14);
+// myBST.add(8);
+// myBST.add(5);
+// myBST.add(12);
+// myBST.add(33);
+// myBST.add(52);
+// myBST.add(1);
+
+// console.log(findKNodes(myBST.root, 2));
+
+module.exports = findKNodes;
diff --git a/src/_DataStructures_/Trees/BinarySearchTree/find-kth-max/index.js b/src/_DataStructures_/Trees/BinarySearchTree/find-kth-max/index.js
new file mode 100644
index 00000000..21ba18f7
--- /dev/null
+++ b/src/_DataStructures_/Trees/BinarySearchTree/find-kth-max/index.js
@@ -0,0 +1,39 @@
+// eslint-disable-next-line no-unused-vars
+const BST = require('../index');
+
+// Inorder traversal returns a sorted array
+function inOrderTraversal(root) {
+ if (root === null) return [];
+ let arr = [];
+ // traverse left
+ const left = inOrderTraversal(root.leftChild);
+ arr = [...left, root.value];
+ const right = inOrderTraversal(root.rightChild);
+ return [...arr, ...right];
+}
+
+function findKthMax(rootNode, k) {
+ const arr = inOrderTraversal(rootNode);
+ if (k <= 0 || k > arr.lenth) {
+ throw new Error('Invalid value for K');
+ }
+ return arr[arr.length - k];
+}
+
+// // create a BST
+// const myBST = new BST(6);
+
+// myBST.add(2);
+// myBST.add(19);
+// myBST.add(14);
+// myBST.add(8);
+// myBST.add(5);
+// myBST.add(12);
+// myBST.add(33);
+// myBST.add(52);
+// myBST.add(1);
+
+// // find 3rd max
+// console.log(findKthMax(myBST.root, 3));
+
+module.exports = findKthMax;
diff --git a/src/_DataStructures_/Trees/BinarySearchTree/find-kth-min/index.js b/src/_DataStructures_/Trees/BinarySearchTree/find-kth-min/index.js
new file mode 100644
index 00000000..ad18cdea
--- /dev/null
+++ b/src/_DataStructures_/Trees/BinarySearchTree/find-kth-min/index.js
@@ -0,0 +1,39 @@
+// eslint-disable-next-line no-unused-vars
+const BST = require('../index');
+
+// Inorder traversal returns a sorted array
+function inOrderTraversal(root) {
+ if (root === null) return [];
+ let arr = [];
+ // traverse left
+ const left = inOrderTraversal(root.leftChild);
+ arr = [...left, root.value];
+ const right = inOrderTraversal(root.rightChild);
+ return [...arr, ...right];
+}
+
+function findKthMin(rootNode, k) {
+ const arr = inOrderTraversal(rootNode);
+ if (k <= 0 || k > arr.lenth) {
+ throw new Error('Invalid value for K');
+ }
+ return arr[k - 1];
+}
+
+// // create a BST
+// const myBST = new BST(6);
+
+// myBST.add(2);
+// myBST.add(19);
+// myBST.add(14);
+// myBST.add(8);
+// myBST.add(5);
+// myBST.add(12);
+// myBST.add(33);
+// myBST.add(52);
+// myBST.add(1);
+// myBST.add(0);
+
+// console.log(findKthMin(myBST.root, 3));
+
+module.exports = findKthMin;
diff --git a/src/_DataStructures_/Trees/BinarySearchTree/height-of-bst/index.js b/src/_DataStructures_/Trees/BinarySearchTree/height-of-bst/index.js
new file mode 100644
index 00000000..ad4f1ee7
--- /dev/null
+++ b/src/_DataStructures_/Trees/BinarySearchTree/height-of-bst/index.js
@@ -0,0 +1,33 @@
+// eslint-disable-next-line no-unused-vars
+const BST = require('../index');
+
+function findHeightOfBST(root) {
+ let leftHeight = 0;
+ let rightHeight = 0;
+
+ if (root === null) return 0;
+ leftHeight = findHeightOfBST(root.leftChild);
+ rightHeight = findHeightOfBST(root.rightChild);
+
+ if (leftHeight > rightHeight) {
+ return leftHeight + 1;
+ }
+ return rightHeight + 1;
+}
+
+// create a BST
+// const myBST = new BST(6);
+// myBST.add(4);
+// myBST.add(9);
+// myBST.add(2);
+// myBST.add(5);
+// myBST.add(14);
+// myBST.add(8);
+// myBST.add(12);
+// myBST.add(10);
+
+// // console.log(myBST.root);
+// console.log(myBST.traversePreorder());
+// console.log(findHeightOfBST(myBST.root));
+
+module.exports = findHeightOfBST;
diff --git a/src/_DataStructures_/Trees/BST/index.js b/src/_DataStructures_/Trees/BinarySearchTree/index.js
similarity index 100%
rename from src/_DataStructures_/Trees/BST/index.js
rename to src/_DataStructures_/Trees/BinarySearchTree/index.js