/** * @return array */ public function preOrder() { /*current + left + right */ /** * @var BinaryTreeNode $root */ $root = $this->getRoot(); $listArray = []; array_push($listArray, $root->getData()); if (!$this->isEmpty()) { $left = $root->getLeft(); if ($left) { $leftTree = new self($left); $listArray = array_merge($listArray, $leftTree->preOrder()); } $right = $root->getRight(); if ($right) { $rightTree = new self($right); $listArray = array_merge($listArray, $rightTree->preOrder()); } } return $listArray; }