From 3744a8a556880d895fe8b717097f043945013a5b Mon Sep 17 00:00:00 2001 From: Trent W Date: Mon, 3 Apr 2017 23:09:07 -0500 Subject: [PATCH 1/2] Update ch4-q02.js updated solution to run in O(N) time. --- src/chapter4/ch4-q02.js | 80 +++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 19 deletions(-) diff --git a/src/chapter4/ch4-q02.js b/src/chapter4/ch4-q02.js index d504294..5e0f5be 100644 --- a/src/chapter4/ch4-q02.js +++ b/src/chapter4/ch4-q02.js @@ -1,6 +1,48 @@ 'use strict'; -import { Tree } from './helpers'; +// import { Tree } from './helpers'; + + +// * The prior solution can be improved upon and run in +// Time: O(N); +// Space: O(N); +/* A function that constructs Balanced Binary Search Tree + from a sorted array */ + +export function main(arr) { + if (!arr || arr.length < 1) return null; + + const tree = new BinaryTree(); + //if its only one number its a node not a tree else create tree; + return arr.length === 1 ? new Node(arr[0]) : + tree.createBst(arr, 0, arr.length - 1); + } + +class Node { + constructor(data) { + this.val = data; + this.left = this.right = null; + } +} + + class BinaryTree { + constructor() { + this.root = null; + } + + createBst(arr, start, end) { + if (start > end) return null; + const mid = Math.floor((start + end) / 2), + node = new Node(arr[mid]); + + + node.left = this.createBst(arr, start, mid - 1); + node.right = this.createBst(arr, mid + 1, end); + return node; + } +} + + /** * As the list is already sorted the best way to create a balanced tree is by @@ -12,22 +54,22 @@ import { Tree } from './helpers'; * Time: O(N lg N) * Additional space: O(N) */ -export function makeBalancedTree(values) { - let tree = new Tree(); - if (values && values.length) { - add(tree, values, 0, values.length - 1); - } - return tree; -} +// export function makeBalancedTree(values) { +// let tree = new Tree(); +// if (values && values.length) { +// add(tree, values, 0, values.length - 1); +// } +// return tree; +// } -function add(tree, values, start, end) { - if (start === end) { - tree.add(values[start]); - } - else if (start < end) { - let mid = start + Math.floor((end - start) / 2); - tree.add(values[mid]); - add(tree, values, start, mid - 1); - add(tree, values, mid + 1, end); - } -} +// function add(tree, values, start, end) { +// if (start === end) { +// tree.add(values[start]); +// } +// else if (start < end) { +// let mid = start + Math.floor((end - start) / 2); +// tree.add(values[mid]); +// add(tree, values, start, mid - 1); +// add(tree, values, mid + 1, end); +// } +// } From b840f71a38b7d448e3a441cac95be36e9ca0e147 Mon Sep 17 00:00:00 2001 From: Trent W Date: Mon, 3 Apr 2017 23:22:20 -0500 Subject: [PATCH 2/2] Update ch4-q02.js --- src/chapter4/ch4-q02.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/chapter4/ch4-q02.js b/src/chapter4/ch4-q02.js index 5e0f5be..7007b4b 100644 --- a/src/chapter4/ch4-q02.js +++ b/src/chapter4/ch4-q02.js @@ -26,9 +26,6 @@ class Node { } class BinaryTree { - constructor() { - this.root = null; - } createBst(arr, start, end) { if (start > end) return null;