数据结构之前序遍历(JS)

124 阅读1分钟
//创建一个满二叉树
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)
}