From af11fa31605f0fb5ee0bb041cc637ede42d58373 Mon Sep 17 00:00:00 2001 From: Julius Alvarado Date: Wed, 1 Jan 2020 10:55:05 -0800 Subject: [PATCH] studying the code and adding more comments to understand MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit it better 🤨🤔 --- @cs/{BinaryTree.php => BinarySearchTree.php} | 72 +++++++++++++++++--- @cs/index.php | 17 +++-- 2 files changed, 72 insertions(+), 17 deletions(-) rename @cs/{BinaryTree.php => BinarySearchTree.php} (70%) diff --git a/@cs/BinaryTree.php b/@cs/BinarySearchTree.php similarity index 70% rename from @cs/BinaryTree.php rename to @cs/BinarySearchTree.php index eff678a..a6865e6 100644 --- a/@cs/BinaryTree.php +++ b/@cs/BinarySearchTree.php @@ -1,4 +1,6 @@ insertNode($this->root, $node); } } // END OF: insert() - - private function insertNode($node, $newNode) { + + /** + * Private Recursive Helper Function + * + * We don't operate on the result of recursive call so we don't + * return the recursive call. + * + * The recursive call will just do internal work so nothing has + * to be returned + * + * @param $node + * @param $newNode + */ + private function insertNode($node, $newNode): void { if($newNode->key < $node->key) { if($node->left === null) { $node->left = $newNode; @@ -51,11 +71,20 @@ private function insertNode($node, $newNode) { } } } // END OF: insertNode() - + + /** + * @return mixed root - can be null or a Node + */ public function getRoot() { return $this->root; } - + + /** + * Primary Public function + * + * @param $key + * @return bool + */ public function search($key) { return $this->searchNode($this->root, $key); } @@ -74,19 +103,40 @@ private function searchNode($node, $key) { return true; } } - + + /** + * Primary Public Function + * + * @param \Closure $callback + */ public function inOrderTraverse(\Closure $callback) { $this->inOrderTraverseNode($this->root, $callback); } - + + /** + * Private Recursive Helper Function + * + * @param $node + * @param $callback + */ private function inOrderTraverseNode($node, $callback) { + $key = $node->key ?? 'null'; + echo "\ncurrent key: $key"; + if($node !== null) { $this->inOrderTraverseNode($node->left, $callback); - $callback($node->key); + $recurse1 = "point1"; + $callback($key); $this->inOrderTraverseNode($node->right, $callback); + $recurse2 = 'point2'; } } - + + /** + * Primary Public Function + * + * @param \Closure $callback + */ public function preOrderTraverse(\Closure $callback) { } diff --git a/@cs/index.php b/@cs/index.php index a2591b1..c296824 100644 --- a/@cs/index.php +++ b/@cs/index.php @@ -6,27 +6,32 @@ * Time: 1:46 AM */ -require('BinaryTree.php'); +require('BinarySearchTree.php'); -use julius\BinaryTree; +use julius\BinarySearchTree; $set1 = [11, 7, 15, 5, 3, 9, 8, 10, 13, 12, 14, 20, 18, 25, 6]; -$binaryTree = new BinaryTree(); +$binaryTree = new BinarySearchTree(); foreach($set1 as $v) { $binaryTree->insert($v); } -echo "\n----------------------------------------------------------------------\n"; +echo "\n----------------------------------------------------------------------------------\n"; -$callback = function($value){ +$treeSorted = []; +$callback = function($value) use (&$treeSorted) { + $treeSorted[] = "n<$value>"; echo " [$value] "; }; $binaryTree->inOrderTraverse($callback); -echo "\n----------------------------------------------------------------------\n"; +echo "\n\n"; +var_export($treeSorted); + +echo "\n----------------------------------------------------------------------------------\n";