PHP基于非递归算法实现二叉树的遍历操作,常用的包括先序、中序和后序遍历。在本文中,将通过代码实现这些遍历方式,并讲解具体的实现过程。
1. 先序遍历
先序遍历是二叉树遍历的一种方式,是按照访问根节点、左子树、右子树的顺序进行遍历。下面是使用非递归算法实现先序遍历的PHP代码:
function preorderTraversal($root) {
$stack = [];
$result = [];
array_push($stack, $root);
while (!empty($stack)) {
$node = array_pop($stack);
if ($node != null) {
array_push($result, $node->val);
if ($node->right != null) {
array_push($stack, $node->right);
}
if ($node->left != null) {
array_push($stack, $node->left);
}
}
}
return $result;
}
上述代码中,首先定义了一个栈$stack
和一个结果数组$result
,并将根节点$root
压入栈中。然后进入循环,每次从栈中弹出一个节点进行处理,如果该节点不为空,则将其保存到结果数组中,并按照先右后左的顺序将其子节点压入栈中。最后返回结果数组。
2. 后序遍历
后序遍历是二叉树遍历的一种方式,是按照访问左子树、右子树、根节点的顺序进行遍历。下面是使用非递归算法实现后序遍历的PHP代码:
function postorderTraversal($root) {
$stack = [];
$result = [];
array_push($stack, $root);
while (!empty($stack)) {
$node = array_pop($stack);
if ($node != null) {
array_push($result, $node->val);
if ($node->left != null) {
array_push($stack, $node->left);
}
if ($node->right != null) {
array_push($stack, $node->right);
}
}
}
return array_reverse($result);
}
上述代码中,首先定义了一个栈$stack
和一个结果数组$result
,并将根节点$root
压入栈中。然后进入循环,每次从栈中弹出一个节点进行处理,如果该节点不为空,则将其保存到结果数组中,并按照先左后右的顺序将其子节点压入栈中。最后需要将结果数组反转一下才能得到正确的后序遍历结果。
示例说明
下面是一棵二叉树的结构,我们将使用上述代码对其进行遍历:
1
/ \
2 3
/ \ / \
4 5 6 7
使用先序遍历的结果为[1, 2, 4, 5, 3, 6, 7]
,使用后序遍历的结果为[4, 5, 2, 6, 7, 3, 1]
。
另外,需要注意的是,上述代码中的二叉树节点结构需要自行定义,这里以以下方式定义:
class TreeNode {
public $val = null;
public $left = null;
public $right = null;
function __construct($val = 0, $left = null, $right = null) {
$this->val = $val;
$this->left = $left;
$this->right = $right;
}
}
上述的示例和代码仅供参考,读者可以根据自己的需求,进行相应的修改和扩展。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例 - Python技术站