legongju.com
我们一直在努力
2024-12-24 00:34 | 星期二

php二叉树怎样遍历节点

在 PHP 中,可以使用递归或迭代方法来遍历二叉树节点。这里,我们将介绍两种方法:前序遍历、中序遍历和后序遍历。

首先,定义一个简单的二叉树节点类:

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

    public function __construct($value) {
        $this->value = https://www.yisu.com/ask/$value;>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;
            }
        }
    }
}

使用这些遍历函数,可以方便地遍历二叉树的节点。

未经允许不得转载 » 本文链接:https://www.legongju.com/article/34264.html

相关推荐

  • php directory_separator如何处理绝对路径

    php directory_separator如何处理绝对路径

    在PHP中,DIRECTORY_SEPARATOR常量用于表示当前操作系统的目录分隔符。这个常量在Windows系统上为反斜杠(\),而在Unix和Linux系统上为正斜杠(/)。
    当你...

  • php directory_separator如何处理相对路径

    php directory_separator如何处理相对路径

    在PHP中,DIRECTORY_SEPARATOR常量用于表示当前操作系统的目录分隔符。这个常量在Windows系统上为反斜杠(\),而在Unix和Linux系统上为正斜杠(/)。
    处理...

  • php directory_separator如何避免使用错误

    php directory_separator如何避免使用错误

    在PHP中,DIRECTORY_SEPARATOR常量用于表示当前操作系统的目录分隔符。为了避免使用错误,您应该始终使用此常量而不是硬编码的路径分隔符(例如,在Windows中使用...

  • php directory_separator在不同操作系统下表现

    php directory_separator在不同操作系统下表现

    directory_separator 是 PHP 中的一个预定义常量,用于表示当前操作系统中的目录分隔符。在不同的操作系统下,它会自动适应相应的分隔符。 在 Windows 操作系统中...

  • aardio php怎样进行调试

    aardio php怎样进行调试

    Aardio 是一种新的编程语言,它集成了多种现代编程语言的特性,包括 C++、Java、Python 和 JavaScript 等。然而,关于如何在 Aardio 中使用 PHP 进行调试,目前并...

  • aardio php适合哪种项目

    aardio php适合哪种项目

    Aardio PHP 是一种混合编程语言,它结合了 Aardio 的易用性和 PHP 的动态网页处理能力,适合开发多种类型的项目。以下是 Aardio PHP 适合开发的项目类型: 桌面应...

  • aardio php如何调用接口

    aardio php如何调用接口

    Aardio 是一种新的编程语言,它提供了与 PHP 类似的语法和功能。要在 Aardio 中调用 PHP 接口,您需要遵循以下步骤: 首先,确保您已经安装了 Aardio 编译器。您...

  • aardio php能实现哪些功能

    aardio php能实现哪些功能

    Aardio 是一种由国内公司开发的编程语言,它旨在简化网络应用和服务的开发过程。PHP 是一种广泛使用的开源服务器端脚本语言,特别适用于 Web 开发并可嵌入 HTML。...