From 662418a1af21d9b978e540110a7359a3513fc36a Mon Sep 17 00:00:00 2001 From: Piyush Aryaprakash Date: Thu, 11 May 2023 17:55:23 +0530 Subject: [PATCH] feat: add preOrder algorithm for tree data structure. test: add testcases for preOrder algortihm --- Data-Structures/Tree/PreOrder.js | 10 +++ Data-Structures/Tree/test/PreOrder.test.js | 92 ++++++++++++++++++++++ 2 files changed, 102 insertions(+) create mode 100644 Data-Structures/Tree/PreOrder.js create mode 100644 Data-Structures/Tree/test/PreOrder.test.js diff --git a/Data-Structures/Tree/PreOrder.js b/Data-Structures/Tree/PreOrder.js new file mode 100644 index 0000000000..516431781f --- /dev/null +++ b/Data-Structures/Tree/PreOrder.js @@ -0,0 +1,10 @@ +function preOrder (root) { + if (root === null) return [] + + const left = preOrder(root.left) + const right = preOrder(root.right) + + return [root.value, ...left, ...right] +} + +export { preOrder } diff --git a/Data-Structures/Tree/test/PreOrder.test.js b/Data-Structures/Tree/test/PreOrder.test.js new file mode 100644 index 0000000000..1e24e7880c --- /dev/null +++ b/Data-Structures/Tree/test/PreOrder.test.js @@ -0,0 +1,92 @@ +import { preOrder } from '../PreOrder' + +describe('preOrder function', () => { + test('should return an empty array for an empty tree', () => { + const tree = null + expect(preOrder(tree)).toEqual([]) + }) + + test('should return an array with the root value for a tree with only one node', () => { + const tree = { + value: 5, + left: null, + right: null + } + expect(preOrder(tree)).toEqual([5]) + }) + + test('should return the correct array for a tree with multiple nodes', () => { + const tree = { + value: 5, + left: { + value: 3, + left: { + value: 2, + left: null, + right: null + }, + right: { + value: 4, + left: null, + right: null + } + }, + right: { + value: 7, + left: { + value: 6, + left: null, + right: null + }, + right: { + value: 8, + left: null, + right: null + } + } + } + expect(preOrder(tree)).toEqual([5, 3, 2, 4, 7, 6, 8]) + }) + + test('should return the correct array for a tree with a single branch to the left', () => { + const tree = { + value: 5, + left: { + value: 4, + left: { + value: 3, + left: { + value: 2, + left: null, + right: null + }, + right: null + }, + right: null + }, + right: null + } + expect(preOrder(tree)).toEqual([5, 4, 3, 2]) + }) + + test('should return the correct array for a tree with a single branch to the right', () => { + const tree = { + value: 5, + left: null, + right: { + value: 6, + left: null, + right: { + value: 7, + left: null, + right: { + value: 8, + left: null, + right: null + } + } + } + } + expect(preOrder(tree)).toEqual([5, 6, 7, 8]) + }) +})