From 47a8f5f11235c80dd16bb0a6ac5fc7bd62f7f931 Mon Sep 17 00:00:00 2001 From: DeoJin <268571697+DeoJin@users.noreply.github.com> Date: Tue, 17 Mar 2026 10:44:27 +0100 Subject: [PATCH] fix(tree): keep parent pointer when replacing children --- src/data-structures/tree/BinaryTreeNode.js | 2 ++ src/data-structures/tree/__test__/BinaryTreeNode.test.js | 1 + 2 files changed, 3 insertions(+) diff --git a/src/data-structures/tree/BinaryTreeNode.js b/src/data-structures/tree/BinaryTreeNode.js index 44c9390e41..ca0c27f3cf 100644 --- a/src/data-structures/tree/BinaryTreeNode.js +++ b/src/data-structures/tree/BinaryTreeNode.js @@ -167,11 +167,13 @@ export default class BinaryTreeNode { if (this.left && this.nodeComparator.equal(this.left, nodeToReplace)) { this.left = replacementNode; + this.left.parent = this; return true; } if (this.right && this.nodeComparator.equal(this.right, nodeToReplace)) { this.right = replacementNode; + this.right.parent = this; return true; } diff --git a/src/data-structures/tree/__test__/BinaryTreeNode.test.js b/src/data-structures/tree/__test__/BinaryTreeNode.test.js index 8eeda4dda5..3b5d485c6e 100644 --- a/src/data-structures/tree/__test__/BinaryTreeNode.test.js +++ b/src/data-structures/tree/__test__/BinaryTreeNode.test.js @@ -91,6 +91,7 @@ describe('BinaryTreeNode', () => { expect(rootNode.replaceChild(rootNode.right, rootNode.right.right)).toBe(true); expect(rootNode.right.value).toBe(5); + expect(rootNode.right.parent).toEqual(rootNode); expect(rootNode.right.right).toBeNull(); expect(rootNode.traverseInOrder()).toEqual([1, 2, 5]);