Moje pytanie w skrócie to: Jak mogę odebrać pośrednie odpowiedzi / wyjście funkcji rekurencyjnej / metody w tablicy, a później wydrukuj tę tablicę gdzie indziej?

Przypuśćmy, że mam klasę węzła:

class Node {
  constructor (data) {
    this.data = data
    this.left = null
    this.right = null
    this.parent = null
  }
}

I klasa BST

class BST {
  constructor () {
    this.root = null
    this.nodeCount = 0
  }
  insert (data) {
    const node = new Node(data)
    this.nodeCount++
    if (this.root == null) {
      this.root = node
    } else {
      this.insertNode(this.root, node)
    }
    return this.search(data)
  }
  insertNode (node, newNode) {
    if (newNode.data < node.data) {
      if (node.left === null) {
        newNode.parent = node
        node.left = newNode
      } else {
        this.insertNode(node.left, newNode)
      }
    } else {
      if (node.right === null) {
        newNode.parent = node
        node.right = newNode
      } else {
        this.insertNode(node.right, newNode)
      }
    }
  }
  inOrder (node) {
    if (node !== null) {
      this.inOrder(node.left)
      console.log(node.data)
      this.inOrder(node.right)
    }
  }
  createTree (bst, arr = []) {
    for (let item of arr) {
      bst.insert(item)
    }
    return bst
  }
}

Teraz, gdy mam te dwie klasy, mogę stworzyć drzewo binarne:

const bst = new BST()
const tree = bst.createTree(bst, [15, 25, 10, 7, 22, 17, 13, 5, 9, 27])
const root = tree.getRootNode()

A następnie przemierzanie:

console.log('Traversing tree (InOrder): ')
bst.inOrder(root)

To, co chcę zrobić, to podczas przemierzania, chcę nacisnąć wszystkie wartości w tablicy, zamiast go drukować. W wyniku uruchomienia bst.inorder () dostanę tablicę ze wszystkimi elementami na drzewie. Jak mogę to zrobić? Z góry dziękuję za pomoc.

0
ahadcse 19 marzec 2020, 00:12

1 odpowiedź

Najlepsza odpowiedź

W końcu znalazłem sposób na rozwiązanie tego problemu. Poniżej znajduje się metoda, która w porządku jest pierwszym przemieszczaniem, który zapewnia mi sortowaną tablicę w odpowiedzi:

traverse(cb) {
  function dfs(node) {
    if (node === null) return
    dfs(node.left)
    cb(node)
    dfs(node.right)
    return node
   }
   dfs(this.root)
   return this
}
const inOrderData = []
bst.traverse(function (node) {
  inOrderData.push(node.data)
})
console.log("Tree data: ", inOrderData)

Zasadniczo to, co zrobiłem, to wysłałem funkcję zwrotną do metody Traverse jako parametru, a funkcja zwrotna akceptuje węzeł jako parametr. Następnie wewnątrz głównej funkcji po prostu naciskam dane węzła do tablicy.

0
ahadcse 29 marzec 2020, 00:21