From c8dff3d84d5a0502da7acb0a1a1fb79d8e4ee198 Mon Sep 17 00:00:00 2001 From: Parth Agrawal Date: Wed, 26 Jun 2024 15:24:18 -0400 Subject: [PATCH 1/3] insert and read tree --- src/app/algorithms/page.tsx | 31 -------- .../bubblesort/bubbleSort.ts | 0 .../{algorithms => dsa}/bubblesort/page.tsx | 0 .../insertionsort/insertionSort.ts | 0 .../insertionsort/page.tsx | 0 src/app/dsa/page.tsx | 42 +++++++++++ .../{algorithms => dsa}/quicksort/page.tsx | 0 .../quicksort/quicksort.ts | 0 src/app/dsa/tree/tree.ts | 71 +++++++++++++++++++ src/app/page.tsx | 2 +- 10 files changed, 114 insertions(+), 32 deletions(-) delete mode 100644 src/app/algorithms/page.tsx rename src/app/{algorithms => dsa}/bubblesort/bubbleSort.ts (100%) rename src/app/{algorithms => dsa}/bubblesort/page.tsx (100%) rename src/app/{algorithms => dsa}/insertionsort/insertionSort.ts (100%) rename src/app/{algorithms => dsa}/insertionsort/page.tsx (100%) create mode 100644 src/app/dsa/page.tsx rename src/app/{algorithms => dsa}/quicksort/page.tsx (100%) rename src/app/{algorithms => dsa}/quicksort/quicksort.ts (100%) create mode 100644 src/app/dsa/tree/tree.ts diff --git a/src/app/algorithms/page.tsx b/src/app/algorithms/page.tsx deleted file mode 100644 index 623aad5..0000000 --- a/src/app/algorithms/page.tsx +++ /dev/null @@ -1,31 +0,0 @@ -import Link from "next/link"; -import BubbleSort from "./bubblesort/page"; - -const Algorithms = () => { - return ( - <> -
-
- - The Parth Algorithms -
-
- - - Bubble sort - - - Insertion sort - - - Quick sort (WIP) - -
-
- - - ) - -} - -export default Algorithms; \ No newline at end of file diff --git a/src/app/algorithms/bubblesort/bubbleSort.ts b/src/app/dsa/bubblesort/bubbleSort.ts similarity index 100% rename from src/app/algorithms/bubblesort/bubbleSort.ts rename to src/app/dsa/bubblesort/bubbleSort.ts diff --git a/src/app/algorithms/bubblesort/page.tsx b/src/app/dsa/bubblesort/page.tsx similarity index 100% rename from src/app/algorithms/bubblesort/page.tsx rename to src/app/dsa/bubblesort/page.tsx diff --git a/src/app/algorithms/insertionsort/insertionSort.ts b/src/app/dsa/insertionsort/insertionSort.ts similarity index 100% rename from src/app/algorithms/insertionsort/insertionSort.ts rename to src/app/dsa/insertionsort/insertionSort.ts diff --git a/src/app/algorithms/insertionsort/page.tsx b/src/app/dsa/insertionsort/page.tsx similarity index 100% rename from src/app/algorithms/insertionsort/page.tsx rename to src/app/dsa/insertionsort/page.tsx diff --git a/src/app/dsa/page.tsx b/src/app/dsa/page.tsx new file mode 100644 index 0000000..1007e09 --- /dev/null +++ b/src/app/dsa/page.tsx @@ -0,0 +1,42 @@ +import Link from "next/link"; +import BubbleSort from "./bubblesort/page"; + +const Algorithms = () => { + return ( + <> +
+
+ + The Parth Structures and Algorithms +
+ +
+
+ Algorithms +
+
+ + + Bubble sort + + + Insertion sort + + + Quick sort (WIP) + + +
+ +
+ Data Structures +
+
+
+ + + ) + +} + +export default Algorithms; \ No newline at end of file diff --git a/src/app/algorithms/quicksort/page.tsx b/src/app/dsa/quicksort/page.tsx similarity index 100% rename from src/app/algorithms/quicksort/page.tsx rename to src/app/dsa/quicksort/page.tsx diff --git a/src/app/algorithms/quicksort/quicksort.ts b/src/app/dsa/quicksort/quicksort.ts similarity index 100% rename from src/app/algorithms/quicksort/quicksort.ts rename to src/app/dsa/quicksort/quicksort.ts diff --git a/src/app/dsa/tree/tree.ts b/src/app/dsa/tree/tree.ts new file mode 100644 index 0000000..bdbea40 --- /dev/null +++ b/src/app/dsa/tree/tree.ts @@ -0,0 +1,71 @@ +import { root } from "postcss" + +type Node = { + value: number, + leftNode?: Node, + rightNode?: Node, +} + +// type CreateProps = { +// root?: Node +// value: number +// leftNode: Node +// rightNode: Node +// } + +// takes a value and a tree (root) and returns a new tree (root) +const insertNode = (value: number, root: Node): Node => { + if (value < root.value) { + if (root.leftNode) insertNode(value, root.leftNode) + else root.leftNode = { value } + } + else { + if (root.rightNode) insertNode(value, root.rightNode) + else root.rightNode = { value } + } + + return root + + +} +const readTree = (root: Node, callback: Function) => { + callback('parent:', root.value) + if (root.leftNode) callback('left: ', root.leftNode.value); + if (root.rightNode) callback('right: ', root.rightNode.value); + if (root.leftNode) readTree(root.leftNode, callback); + if (root.rightNode) readTree(root.rightNode, callback); +} + + + + + +const startArr = [1, 2, 5, 6, 8, 3, 9, 4, 7, 10] + +const startNode: Node = { + value: 5, + leftNode: { + value: 3, + leftNode: { + value: 2 + }, + // rightNode: { + // value: 4 + // } + }, + rightNode: { + value: 7, + leftNode: { + value: 6, + } + } + +} + +insertNode(4, startNode); +readTree(startNode, console.log); + + + + + diff --git a/src/app/page.tsx b/src/app/page.tsx index 81f872f..1ca0dda 100644 --- a/src/app/page.tsx +++ b/src/app/page.tsx @@ -3,7 +3,7 @@ import { redirect } from "next/navigation"; const Home = () => { - redirect('/algorithms') + redirect('/dsa') } From e3cde333d4c68991d64cb035c5321d69e906c4ba Mon Sep 17 00:00:00 2001 From: Parth Agrawal Date: Wed, 26 Jun 2024 17:43:35 -0400 Subject: [PATCH 2/3] deleteNode for 1 and 0 childs works --- src/app/dsa/tree/tree.ts | 86 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 84 insertions(+), 2 deletions(-) diff --git a/src/app/dsa/tree/tree.ts b/src/app/dsa/tree/tree.ts index bdbea40..210d5d5 100644 --- a/src/app/dsa/tree/tree.ts +++ b/src/app/dsa/tree/tree.ts @@ -2,8 +2,8 @@ import { root } from "postcss" type Node = { value: number, - leftNode?: Node, - rightNode?: Node, + leftNode?: Node | null, + rightNode?: Node | null, } // type CreateProps = { @@ -36,6 +36,83 @@ const readTree = (root: Node, callback: Function) => { if (root.rightNode) readTree(root.rightNode, callback); } +type deleteNodeProps = { + value: number, + root: Node, + parentNode?: Node, +} + +const deleteNode = (props: deleteNodeProps) => { + + const { value } = props + const { root } = props + const { parentNode } = props + + + + const findNextNode = (root: Node) => { + if (root.leftNode) findNextNode(root.leftNode); + return root + + } + // find target + if (value < root.value) { + if (!root.leftNode) { + console.log('node not found') + return; + } + deleteNode({ value, root: root.leftNode, parentNode: root }) + } + else if (value > root.value) { + if (!root.rightNode) { + console.log('node not found') + return; + } + + deleteNode({ value, root: root.rightNode, parentNode: root }) + } + else { + // target found + + if (parentNode) { + // two children + if (root.leftNode && root.rightNode) { + const nextNode = findNextNode(root.rightNode) + root.value = nextNode.value + deleteNode({ value: nextNode.value, root: nextNode }) + + } + // only one child + else if (root.leftNode || root.rightNode) { + + // if it's on the left then the parent node's left one needs to be reassigned + if (root.value < parentNode.value) { + parentNode.leftNode = root.leftNode || root.rightNode + } + else { + parentNode.rightNode = root.leftNode || root.rightNode + } + + + } + // no children + if (!root.leftNode && !root.rightNode) { + if (root.value < parentNode.value) { + parentNode.leftNode = null + } + if (root.value >= parentNode.value) { + parentNode.rightNode = null + } + } + } + + + + } + + +} + @@ -64,6 +141,11 @@ const startNode: Node = { insertNode(4, startNode); readTree(startNode, console.log); +debugger; +deleteNode({ value: 3, root: startNode }) +console.log('after delete') +readTree(startNode, console.log); + From a5985946a8974a3bd0772347004ff3716854df3c Mon Sep 17 00:00:00 2001 From: Parth Agrawal Date: Wed, 26 Jun 2024 17:46:41 -0400 Subject: [PATCH 3/3] i think deleteNode works --- src/app/dsa/tree/tree.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/app/dsa/tree/tree.ts b/src/app/dsa/tree/tree.ts index 210d5d5..6731953 100644 --- a/src/app/dsa/tree/tree.ts +++ b/src/app/dsa/tree/tree.ts @@ -78,8 +78,9 @@ const deleteNode = (props: deleteNodeProps) => { // two children if (root.leftNode && root.rightNode) { const nextNode = findNextNode(root.rightNode) - root.value = nextNode.value - deleteNode({ value: nextNode.value, root: nextNode }) + const tempValue = nextNode.value + deleteNode({ value: nextNode.value, root: root }) + root.value = tempValue } // only one child