<?php
echo "PHP树的操作";
/*
* 二叉树遍历
*/
class Node{
public $value;
public $left;
public $right;
}
//前序遍历 遍历根节点->遍历左子树->遍历右子树
function preorder($root){
$stack = array();
//每次都放一个节点入栈
array_push($stack, $root);
//print_r($stack);
while (!empty($stack)) {
//print_r($stack);
# code...
$center_node = array_pop($stack);
echo "节点输出".$center_node->value.' ';
if($center_node->right!=null)array_push($stack, $center_node->right);//右子树先入栈
if($center_node->left!=null)array_push($stack, $center_node->left);//左子树后入栈
}
}
//中序遍历 遍历左子树->访问根节点->遍历右子树
function inorder($root){
$stack = array();
$center_node = $root;
while (!empty($stack) || $center_node!=null) {
# code...
while ($center_node!=null) {
# code...
//第一个将根节点入栈,然后不断的将左子树入栈
array_push($stack, $center_node);
$center_node = $center_node->left;
}
//将左子树和根节点出栈,出栈的最后一个肯定是根节点
$center_node = array_pop($stack);
echo $center_node->value."<br>";
//将右子树入栈
$center_node = $center_node->right;
}
}
//后序遍历 遍历左子树,遍历右子树,访问根节点
function postorder($root){
$pushstack = array();
$visitstack = array();
array_push($pushstack, $root);
while (!empty($pushstack)) {
# code...
$center_node = array_pop($pushstack);
array_push($visitstack, $center_node);
if($center_node->left!=null)array_push($pushstack, $center_node->left);
if($center_node->right!=null)array_push($pushstack, $center_node->right);
}
while (!empty($visitstack)){
# code...
$center_node= array_pop($visitstack);
echo $center_node->value."<br>";
}
}
$a = new Node();
$b = new Node();
$c = new Node();
$d = new Node();
$e = new Node();
$f = new Node();
$a->value = 'A';
$b->value = 'B';
$c->value = 'C';
$d->value = 'D';
$e->value = 'E';
$f->value = 'F';
$a->left = $b;
$a->right = $c;
$b->left = $d;
$c->left = $e;
$c->right = $f;
preorder($a);
//inorder($a);
//postorder($a);
PHP关于二叉树的前序中序后序遍历操作
最新推荐文章于 2021-03-22 23:21:30 发布