根左右
const root_deep = tree => {
const res = []
const traverse = t => {
const { value, left, right } = t
res.push(value)
if (left) traverse(left)
if (right) traverse(right)
}
traverse(tree)
return res
}
const root_notdeep = tree => {
const res = []
const stack = [tree]
while(stack.length) {
const { value, left, right } = stack.pop()
res.push(value)
if (right) stack.push(right)
if (left) stack.push(left)
}
return res
}
左根右
const left_deep = tree => {
const res = []
const traverse = t => {
const { value, left, right } = t
if (left) traverse(left)
res.push(value)
if (right) traverse(right)
}
traverse(tree)
return res
}
const left_notdeep = tree => {
const res = []
let node = tree
const stack = []
while(node || stack.length) {
while(node) {
stack.push(node)
node = node.left
}
const { value, left, right } = stack.pop()
res.push(value)
node = right
}
return res
}
左右根
const right_deep = tree => {
const res = []
const traverse = t => {
const { value, left, right } = t
if (left) traverse(left)
if (right) traverse(right)
res.push(value)
}
traverse(tree)
return res
}
const right_notdeep = tree => {
const res = []
const stack = [tree]
while(stack.length) {
const { value, left, right } = stack.pop()
res.push(value)
if (left) stack.push(left)
if (right) stack.push(right)
}
return res.reverse()
}