์ฑ ใ๋๊ตฌ๋ ์๋ฃ ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆใ ๋ณต์ต
์ด์ค ์ฐ๊ฒฐ ๋ฆฌ์คํธ์์๋ ๊ธฐ๋กํด๋์ ๋ง์ง๋ง ๋ ธ๋์ ๋ฐ๋ก ์ ๊ทผํ ์ ์๊ณ , ๊ฐ ๋ ธ๋๊ฐ ๋ฐ๋ก ์ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
๐โโ๏ธ ์ด์ง ํธ๋ฆฌ์ ์ฐ์ฐ ไธญ '์ญ์ '
class TreeNode { constructor(value, left_child = null, right_child = null) { this.value = value; this.left_child = left_child; this.right_child = right_child; } } const node_1 = new TreeNode(1); const node_2 = new TreeNode(3); const root = new TreeNode(5, node_1, node_2); function remove(valueToRemove, node) { if (node === null) { return null; } else if (valueToRemove < node.value) { node.left_child = remove(valueToRemove, node.left_child); } else if (valueToRemove > node.value) { node.right_child = remove(valueToRemove, node.right_child); } else { if (node.left_child === null) { return node.right_child; } else if (node.right_child === null) { return node.left_child; } else { node.right_child = lift(node.right_child, node); return node; } } } function lift(node, nodeToRemove) { if (node.left_child) { node.left_child = lift(node.left_child, nodeToRemove); return node; } else { nodeToRemove.value = node.value; return node.right_child; } }
๐ก ์ค์ ์ํ
// ์ผ์ชฝ ์์ ๋ ธ๋ โ ๋ถ๋ชจ ๋ ธ๋ โ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋ function traverse_and_print(node) { if (node === null) { return; } traverse_and_print(node.left_child); console.log(node.value); traverse_and_print(node.right_child); }
[ ์ฑ ๊ทธ๋ฆผ ์ฐธ๊ณ ]
์ผ์ชฝ ์์ ๋ ธ๋๊ฐ ์์ ๋๊น์ง ๋ด๋ ค๊ฐ์ ๊ฐ์ฅ ์ผ์ชฝ ์์ ๋ ธ๋๋ฅผ ์ถ๋ ฅ
์ถ๋ ฅํ ์ผ์ชฝ ์์ ๋ ธ๋์ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๊ฐ ์์ผ๋ฉด ๊ทธ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ์ถ๋ ฅ
๊ทธ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๊ฐ ์๋ค๋ฉด ๊ทธ ์ค๋ฅธ์ชฝ ์์ ๋ ธ๋๋ฅผ ์ถ๋ ฅ