中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

php二叉樹怎樣遍歷節點

PHP
小樊
82
2024-10-17 19:31:06
欄目: 編程語言

在 PHP 中,可以使用遞歸或迭代方法來遍歷二叉樹節點。這里,我們將介紹兩種方法:前序遍歷、中序遍歷和后序遍歷。

首先,定義一個簡單的二叉樹節點類:

class TreeNode {
    public $value;
    public $left;
    public $right;

    public function __construct($value) {
        $this->value = $value;
        $this->left = null;
        $this->right = null;
    }
}

遞歸遍歷

  1. 前序遍歷(根->左->右)
function preOrderTraversal($node) {
    if ($node === null) {
        return;
    }

    echo $node->value . " ";
    preOrderTraversal($node->left);
    preOrderTraversal($node->right);
}
  1. 中序遍歷(左->根->右)
function inOrderTraversal($node) {
    if ($node === null) {
        return;
    }

    inOrderTraversal($node->left);
    echo $node->value . " ";
    inOrderTraversal($node->right);
}
  1. 后序遍歷(左->右->根)
function postOrderTraversal($node) {
    if ($node === null) {
        return;
    }

    postOrderTraversal($node->left);
    postOrderTraversal($node->right);
    echo $node->value . " ";
}

迭代遍歷

  1. 前序遍歷(根->左->右)
function preOrderTraversalIterative($node) {
    if ($node === null) {
        return;
    }

    $stack = [$node];

    while ($stack) {
        $current = $stack[count($stack) - 1];
        $stack = array_slice($stack, 0, -1);
        echo $current->value . " ";

        if ($current->right !== null) {
            $stack[] = $current->right;
        }
        if ($current->left !== null) {
            $stack[] = $current->left;
        }
    }
}
  1. 中序遍歷(左->根->右)
function inOrderTraversalIterative($node) {
    if ($node === null) {
        return;
    }

    $stack = [];
    $current = $node;

    while ($current !== null || count($stack) > 0) {
        while ($current !== null) {
            $stack[] = $current;
            $current = $current->left;
        }

        $current = array_pop($stack);
        echo $current->value . " ";
        $current = $current->right;
    }
}
  1. 后序遍歷(左->右->根)
function postOrderTraversalIterative($node) {
    if ($node === null) {
        return;
    }

    $stack = [];
    $lastVisitedNode = null;

    $current = $node;
    while ($current !== null || count($stack) > 0) {
        if ($current !== null) {
            $stack[] = $current;
            $current = $current->left;
        } else {
            $topNode = array_pop($stack);
            if ($topNode->right !== null && $lastVisitedNode !== $topNode->right) {
                $current = $topNode->right;
            } else {
                echo $topNode->value . " ";
                $lastVisitedNode = $topNode;
            }
        }
    }
}

使用這些遍歷函數,可以方便地遍歷二叉樹的節點。

0
吉林省| 团风县| 北宁市| 开封市| 夹江县| 花垣县| 浦城县| 固阳县| 武定县| 泰州市| 易门县| 慈利县| 山阳县| 巴南区| 白水县| 菏泽市| 桦川县| 黔西县| 乃东县| 珲春市| 岐山县| 玛纳斯县| 嘉定区| 扬中市| 华宁县| 洛川县| 边坝县| 虞城县| 南漳县| 广德县| 峨山| 海城市| 石棉县| 新蔡县| 鄱阳县| 溆浦县| 连南| 遂川县| 左权县| 祁阳县| 大连市|