class TreeNode {
constructor(value) {
this.value = value
this.left = null
this.right = null
}
}
class BinaryTree {
constructor() {
this.root = null
}
insert(value) {
const newNode = new TreeNode(value)
if (this.root === null) {
this.root = newNode
return
}
const queue = [this.root]
while (queue.length > 0) {
const current = queue.shift()
if (!current.left) {
current.left = newNode
return
} else if (!current.right) {
current.right = newNode
return
} else {
queue.push(current.left)
queue.push(current.right)
}
}
}
preOrderTraversal(node, result = []) {
if (node) {
result.push(node.value)
this.preOrderTraversal(node.left, result)
this.preOrderTraversal(node.right, result)
}
return result
}
inOrderTraversal(node, result = []) {
if (node) {
this.inOrderTraversal(node.left, result)
result.push(node.value)
this.inOrderTraversal(node.right, result)
}
return result
}
postOrderTraversal(node, result = []) {
if (node) {
this.postOrderTraversal(node.left, result)
this.postOrderTraversal(node.right, result)
result.push(node.value)
}
return result
}
}
const tree = new BinaryTree()
tree.insert(1)
tree.insert(2)
tree.insert(3)
tree.insert(4)
tree.insert(5)
tree.insert(6)
tree.insert(7)
console.log('전위 순회:', tree.preOrderTraversal(tree.root))
console.log('중위 순회:', tree.inOrderTraversal(tree.root))
console.log('후위 순회:', tree.postOrderTraversal(tree.root))