php实现的二叉树遍历算法示例
程序员文章站
2024-03-09 17:13:35
本文实例讲述了php实现的二叉树遍历算法。分享给大家供大家参考,具体如下:
今天使用php来实现二叉树的遍历
创建的二叉树如下图所示
php代码如下所示:...
本文实例讲述了php实现的二叉树遍历算法。分享给大家供大家参考,具体如下:
今天使用php来实现二叉树的遍历
创建的二叉树如下图所示
php代码如下所示:
<?php class node { public $value; public $child_left; public $child_right; } final class ergodic { //前序遍历:先访问根节点,再遍历左子树,最后遍历右子树;并且在遍历左右子树时,仍需先遍历根节点,然后访问左子树,最后遍历右子树 public static function preorder($root){ $stack = array(); array_push($stack, $root); while(!empty($stack)){ $center_node = array_pop($stack); echo $center_node->value . ' '; //先把右子树节点入栈,以确保左子树节点先出栈 if($center_node->child_right != null) array_push($stack, $center_node->child_right); if($center_node->child_left != null) array_push($stack, $center_node->child_left); } } //中序遍历:先遍历左子树、然后访问根节点,最后遍历右子树;并且在遍历左右子树的时候。仍然是先遍历左子树,然后访问根节点,最后遍历右子树 public static function midorder($root){ $stack = array(); $center_node = $root; while (!empty($stack) || $center_node != null) { while ($center_node != null) { array_push($stack, $center_node); $center_node = $center_node->child_left; } $center_node = array_pop($stack); echo $center_node->value . ' '; $center_node = $center_node->child_right; } } //后序遍历:先遍历左子树,然后遍历右子树,最后访问根节点;同样,在遍历左右子树的时候同样要先遍历左子树,然后遍历右子树,最后访问根节点 public static function endorder($root){ $push_stack = array(); $visit_stack = array(); array_push($push_stack, $root); while (!empty($push_stack)) { $center_node = array_pop($push_stack); array_push($visit_stack, $center_node); //左子树节点先入$pushstack的栈,确保在$visitstack中先出栈 if ($center_node->child_left != null) array_push($push_stack, $center_node->child_left); if ($center_node->child_right != null) array_push($push_stack, $center_node->child_right); } while (!empty($visit_stack)) { $center_node = array_pop($visit_stack); echo $center_node->value . ' '; } } } //创建二叉树 $a = new node(); $b = new node(); $c = new node(); $d = new node(); $e = new node(); $f = new node(); $g = new node(); $h = new node(); $i = new node(); $a->value = 'a'; $b->value = 'b'; $c->value = 'c'; $d->value = 'd'; $e->value = 'e'; $f->value = 'f'; $g->value = 'g'; $h->value = 'h'; $i->value = 'i'; $a->child_left = $b; $a->child_right = $c; $b->child_left = $d; $b->child_right = $g; $c->child_left = $e; $c->child_right = $f; $d->child_left = $h; $d->child_right = $i; //前序遍历 ergodic::preorder($a); //结果是:a b d h i g c e f echo '<br/>'; //中序遍历 ergodic::midorder($a); //结果是: h d i b g a e c f echo '<br/>'; //后序遍历 ergodic::endorder($a); //结果是: h i d g b e f c a
更多关于php相关内容感兴趣的读者可查看本站专题:《php数据结构与算法教程》、《php基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家php程序设计有所帮助。
上一篇: 详解yii2使用多个数据库的案例