[DFS] 深度優先搜尋(Depth-First Search)

深度優先搜尋

深度優先搜尋有三種搜尋,前序、中序、後序

首先,限定樹的類別

<?php

Class TreeNode {
    public function __construct(
        public $value = 0,
        public ?TreeNode $left = null,
        public ?TreeNode $right = null
    ) {
    }
}

前序走訪

<?php 

function preorder (TreeNode $node) {
    // 最後一個節點
    if ($node == null) return;
    // 從根節點,向左讀取,直到左邊沒有東西後,才向右讀取
    echo $node->value;
    inorder($node->left);
    inorder($node->right);
}

中序走訪

<?php 

function inorder (TreeNode $node) {
    // 最後一個節點
    if ($node == null) return;
    // 從左邊最下面開始讀取,接著向上讀取一層後,再向右讀取
    inorder($node->left);
    echo $node->value;
    inorder($node->right);
}

後序走訪

<?php 

function postorder (TreeNode $node) {
    // 最後一個節點
    if ($node == null) return;
    // 從左邊最下面開始讀取左右數,接著才向上讀取一層
    inorder($node->left);
    inorder($node->right);
    echo $node->value;
}

Last updated