数据结构_二叉树遍历

//二叉树BST
  
  class Node {
    constructor (data) {
      this.data = data
      this.left = null
      this.right = null
    }
  }

  class BST {
    constructor () {
      this.root = null
    }
    insert (data) {
      let newNode = new Node(data)
      if (!this.root) this.root = newNode
      else {
        this.insertNode(this.root, newNode)
      }
    }
    //插入节点的辅助函数
    insertNode (root, newNode) {
      if (newNode.data < root.data) {
        if (root.left == null) root.left = newNode
        else this.insertNode(root.left, newNode) 
      }else {
        if (root.right == null) root.right = newNode
        else this.insertNode(root.right, newNode)
      }
    }
    //先序遍历
    preOrderTraverse (callback) {
      this.perOrderTraverseNode(this.root, callback)
    }
    perOrderTraverseNode (node, callback) {
      if (node) {
        callback(node.data)
        this.perOrderTraverseNode(node.left, callback)
        this.perOrderTraverseNode(node.right, callback)
      }
    }
    //中序遍历
    inOrderTraverse () {
      this.inOrderTraverseNode(this.root)
    }
    inOrderTraverseNode (node) {
      if (node) {
        this.inOrderTraverseNode(node.left)
        console.log(node.data)
        this.inOrderTraverseNode(node.right)
      }
    }
    //后续遍历
    postOrderTraverse () {
      this.postOrderTraverseNode(this.root)
    }
    postOrderTraverseNode (node) {
      if (node) {
        this.postOrderTraverseNode(node.left)
        this.postOrderTraverseNode(node.right)
        console.log(node.data)
      }
    }
  }
  let tree = new BST()
  tree.insert(11)
  tree.insert(5)
  tree.insert(15)
  tree.insert(10)
  tree.insert(16)
  tree.insert(18)
  tree.insert(8)
  tree.insert(7)
  tree.insert(11)
  tree.insert(14)
  tree.insert(6)
  let arr = []
  tree.preOrderTraverse(data => {
    arr.push(data)
  })
  console.log(arr)

 

posted @ 2020-02-24 20:19  前端之旅  阅读(225)  评论(0)    收藏  举报