Trees traversal $this->traverse($node->left); // Do Not appear as $this->traverse($node->left, "pre-order"); // in recursive calling

I am reading a PHP Data Structures book and in Binary Search Trees in Trees Chapter I meet the following… further below… By calling:

$tree->traverse($tree->root, 'pre-order');

subsequently called the

public function preOrder(Node $node) {
    if ($node) {
        echo $node->data . " ";
        if ($node->left) $this->traverse($node->left);
        if ($node->right) $this->traverse($node->right);
    }   
} 

by what logic/thinking (or why) $this->traverse($node->left); // Do Not appear as

$this->traverse($node->left, "pre-order");  // in recursive calling

???? Code works  here full code >>>  <a class="attachment" href="/community/uploads/default/original/3X/2/d/2d8a6f61c5c954c4055663498aea9e8a93ad7459.php">6.php</a> (4.3 KB)
class BST {

    public $root = NULL;
.................................................
    public function traverse(Node $node, string $type="in-order") {
    switch($type) {     
        case "in-order":
        $this->inOrder($node);
        break;
    
        case "pre-order":
        $this->preOrder($node);
        break;
    
        case "post-order":
        $this->postOrder($node);
        break;      
    }   
    }
    
    
    public function preOrder(Node $node) {
    if ($node) {
        echo $node->data . " ";
        if ($node->left) $this->traverse($node->left);
        if ($node->right) $this->traverse($node->right);
    }   
    }
    
    public function inOrder(Node $node) {
    if ($node) {        
        if ($node->left) $this->traverse($node->left);
        echo $node->data . " ";
        if ($node->right) $this->traverse($node->right);
    }
    }
    
    public function postOrder(Node $node) {
    if ($node) {        
        if ($node->left) $this->traverse($node->left);
        if ($node->right) $this->traverse($node->right);
        echo $node->data . " ";
    }
    }

    

}

try {


    $tree = new BST(10);
    
    $tree->insert(12);
    $tree->insert(6);
    $tree->insert(3);
    $tree->insert(8);
    $tree->insert(15);
    $tree->insert(13);
    $tree->insert(36);
    

   $tree->traverse($tree->root, 'pre-order');
   echo "\n";
   $tree->traverse($tree->root, 'in-order');
   echo "\n";
   $tree->traverse($tree->root, 'post-order');
   
} catch (Exception $e) {
    echo $e->getMessage();
}

I’m not quite sure what you’re asking. If it is "why doesn’t this line have the second parameter when it calls traverse(), it’s because the function is defined with a default value. In this line

public function traverse(Node $node, string $type="in-order") {

if you don’t specify the second parameter, then it defaults to “in-order”.

If that’s not what you were asking, can you expand on the question or ask in a different way?

This topic was automatically closed 91 days after the last reply. New replies are no longer allowed.