Faster, Higher, Stronger
更快,更高,更强

二叉树前序遍历的非递归实现

二叉树前序遍历的非递归实现:

function Node (data, left, right) {
    this.data = data
    this.left = left || null
    this.right = right || null
}

function BST () {
    this.root = null
}

function insertNode (parentNode, newNode) {
    if (newNode.data < parentNode.data) {
        if (parentNode.left === null) {
            parentNode.left = newNode
        } else {
            insertNode(parentNode.left, newNode)
        }
    } else {
        if (parentNode.right === null) {
            parentNode.right = newNode
        } else {
            insertNode(parentNode.right, newNode)
        }
    }
}

BST.prototype.insert = function (data) {
    const node = new Node(data, null, null)
    if (this.root === null) {
        this.root = node
    } else {
        insertNode(this.root, node)
    }
}

const bst = new BST();
[23, 45, 16, 37, 3, 99, 22].forEach((item) => {
    bst.insert(item)
})

function preTraverseBST (bst) {
    let node = bst.root
    let arr = [node] // 作为一个栈来使用,只用它的shift和unshift方法
    while (node !== null && arr.length > 0) {
        console.log(node.data)
        if (node.left !== null) {
            arr.unshift(node.left)
            node = node.left
        } else {
            node = arr.shift()
            while (node.right === null && arr.length > 0) {
                node = arr.shift()
            }
            node = node.right
            arr.unshift(node)
        }
    }
}

preTraverseBST(bst)

 

赞(0) 打赏
未经允许不得转载:峰间的云 » 二叉树前序遍历的非递归实现

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏