//创建一个满二叉树
let tree = {value: 1}
{
function createdBinaryTree(deep,tree){
if(deep > 1){
tree.left = {value: tree.value*2}
tree.right = {value: tree.value*2+1}
deep = deep - 1
createdBinaryTree(deep, tree.left)
createdBinaryTree(deep, tree.right)
}else{
return
}
}
createdBinaryTree(3,tree)
console.log(tree)
}
{
/**
* 前序遍历
* @param {*} tree
*/
function preOrderTraveral(tree){
if(!tree){
return
}
console.log(tree.value)
preOrderTraveral(tree.left)
preOrderTraveral(tree.right)
}
preOrderTraveral(tree)
}
console.log('--------------------')
{
/**
* 非递归前序遍历
* @param {*} tree
*/
function stackTraveral(tree){
let stack = []
let node = tree
stack.push(node)
console.log(node.value)
while(stack.length !== 0 || node){
while(node.left){
node = node.left
stack.push(node)
console.log(node.value)
}
do{
node = stack.pop()
} while(stack.length !== 0 && !node.right)
if(node.right){
node = node.right
stack.push(node)
console.log(node.value)
}else{
node = null
}
}
}
stackTraveral(tree)
}