PHP基于非递归算法实现先序、中序及后序遍历二叉树操作示例
作者:重口味AC 发布时间:2023-08-16 04:46:47
标签:PHP,遍历二叉树
本文实例讲述了PHP基于非递归算法实现先序、中序及后序遍历二叉树操作。分享给大家供大家参考,具体如下:
概述:
二叉树遍历原理如下:
针对上图所示二叉树遍历:
1. 前序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。
ABDHECFG
2.中序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。
HDBEAFCG
3.后序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。
HDEBFGCA
实现方法:
先序遍历:利用栈先进后出的特性,先访问根节点,再把右子树压入,再压入左子树。这样取出的时候是先取出左子树,最后取出右子树。
function preorder($root){
$stack = array();
array_push($stack, $root);
while(!empty($stack)){
$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){
while($center_node != null){
array_push($stack, $center_node);
$center_node = $center_node->left;
}
$center_node = array_pop($stack);
echo $center_node->value;
$center_node = $center_node->right;
}
}
后序:先把根节点存起来,然后依次储存左子树和右子树。然后输出。
function tailorder($root){
$stack = array();
$outstack = array();
array_push($$stack, $root);
while($empty($stack)){
$center_node = array_pop($stack);
array_push($outstack, $center_node);
if($center_node->right != null)
array_push($stack, $center_node->right);
if($center_node->left != null)
array_push($stack, $center_node->left);
}
while($empty($outstack)){
$center_node = array_pop($outstack);
echo $center_node->value;
}
}
希望本文所述对大家PHP程序设计有所帮助。
来源:http://blog.csdn.net/acingdreamer/article/details/70377864


猜你喜欢
- 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序
- 1、安装scikit-learn1.1Scikit-learn 依赖Python (>= 2.6 or >= 3.3),NumP
- 仔细观察下面两个python程序,代码一模一样,但是运行的结果却不同,就是因为最后一行return缩进的不同def powersum(pow
- 一、说在前面 需求:有一张长为960,宽为96的图片,需要将其分割成10张96*96的图
- 本文实例讲述了go语言使用第三方包 json化结构体操作。分享给大家供大家参考,具体如下:前提条件:安装好操作系统对应的gitgo get
- 因为工作(懒惰),几年了,断断续续学习又半途而废了一个又一个技能。试着开始用博客记录学习过程中的问题和解决方式,以便激励自己和顺便万一帮助了
- 经过一轮的项目封闭开发,页面制作的动手能力提高了不少,用AW的话说就是被复杂的东西虐过以后很多问题都变得容易了,的确很有道理。我个人觉得技术
- 在数据库应用,我们经常要用到唯一编号,以标识记录。在MySQL中可通过数据列的AUTO_INCREMENT属性来自动生成。MySQL支持多种
- 发现问题写python的时候出现了这个错,然后网上的教程的解决方案几乎都是——“重新定义下这个变量”,看的我一脸懵逼后来发现原来是我把ret
- 前言今天,在网上发现一款很棒的python画图工具库。很简单的api调用就能生成漂亮的图表。并且可以进行一些互动。pyecharts 是一个
- 本文实例讲述了Python实现的微信公众号群发图片与文本消息功能。分享给大家供大家参考,具体如下:在微信公众号开发中,使用api都要附加ac
- pygame如何捕捉鼠标的活动初始化参数import pygame, sysfrom pygame.locals import *def p
- 这年头如果用 python3 做条形码的,肯定(推荐)用 pystrich 。这货官方文档貌似都没写到支持 Code128 ,但是居然有这个
- 1.1全部php生成结构1.2html中嵌套php总结如下:html和php混写规则:php代码必须包在<?php ?>html
- 我们按照面向过程程序设计的思想,使用python编写了程序,追踪铅球在运行过程中的位置信息。下面,修改程序代码,导入turtle模块,将铅球
- 在项目中,我们需要运用到很多来自后端返回的数据。有时是上百条,有时甚至上千条。如果加上后端的多表查询或者数据量过大,这就导致在前
- 一、创建虚拟环境Anaconda是一个Python发行版,有了它就可以新建不同的虚拟环境,比如一个环境需要Python3.7,一个环境需要p
- 写在前面这次的爬虫是关于房价信息的抓取,目的在于练习10万以上的数据处理及整站式抓取。数据量的提升最直观的感觉便是对函数逻辑要求的提高,针对
- 如果是导入有中文的数据,我的mysql 设置的utf8 字符集,所以你要导入的xxx.txt 文件也要保存ut
- 最近刚重构完,我们的一个项目,由原来的jsp模式改为了前后端分离,前端选型为vue,开发完成之后第一件时间就是要部署测试,服务端选的是Apa