> 백엔드 개발 > PHP 튜토리얼 > 二叉树遍历算法

二叉树遍历算法

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
풀어 주다: 2016-06-05 11:50:39
원래의
1268명이 탐색했습니다.
<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	二叉树遍历,是值从根节点出发,按照某种次序依次访问二叉树中的所有节点,使得每个节点被访问一次且仅被访问依次。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;text-align:center;">
	<img src="/static/imghw/default1.png" data-src="http://lanecn-upload.stor.sinaapp.com/image/20140709_1404896527_874807.gif" class="lazy" title="20140709_1404896527_874807.gif" alt="tupan062.gif"   style="max-width:90%"> 
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;text-align:center;">
	图是百度搜的。。。谢谢提供图的英雄。。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    前序遍历二叉树:如果二叉树为空则返回,若二叉树非空,则先遍历左树,再遍历右树,遍历顺序为ABCDEGF。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    中序遍历二叉树:如果二叉树为空则返回,若二叉树非空,则从根节点开始,中序遍历根节点的左子树,然后是访问根节点,最后中序遍历右子树,遍历顺序为CBEGDFA。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    后序遍历二叉树:如果二叉树为空则返回,若二叉树非空,则从左到右先叶子后节点的访问遍历访问左右子树,最后是访问根节点。访问顺序为CGEFDBA。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    层序遍历二叉树:如果二叉树为空则返回,若二叉树非空,则从树的第一层,也就是根节点开始访问,从上而下逐层遍历,在同一层中,按照从左到右的顺序对节点逐个访问。访问顺序为ABCDEFG。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br>

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    现在,我们用PHP代码,来遍历二叉树结构。二叉树是放一个大数组,每一个节点都有三个字段,data表示这个节点的值,lChild表示这个节点的左边子节点,rChild表示这个节点的右边子节点。二叉树的结构我们用上面那张图。
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br>

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	二叉树结构代码如下:
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br>

</p>

<pre class='brush:php;toolbar:false;'>
<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<?php
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	//二叉树
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	$arr = array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    'data' => 'A',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    'lChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        'data' => 'B',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        'lChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'data' => 'C',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'lChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'rChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        'rChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'data' => 'D',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'lChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'data' => 'E',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'lChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'rChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                    'data' => 'G',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                    'lChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                    'rChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            'rChild' => array(
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'data' => 'F',
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'lChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	                'rChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	            ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    ),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    'rChild' => array(),
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>
로그인 후 복사



遍历算法一:前序遍历二叉树


<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<?php
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	//前序遍历二叉树算法
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '前序遍历二叉树算法:';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	PreOrderTraverse($arr);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '<Br>';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	function PreOrderTraverse($node){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    if(empty($node)){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        return;
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    }
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //输出值
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    print_r($node['data']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //左节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    PreOrderTraverse($node['lChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //右节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    PreOrderTraverse($node['rChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	}
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>
로그인 후 복사



遍历算法二:中序遍历二叉树


<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<?php
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	//中序遍历二叉树算法
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '中序遍历二叉树算法:';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	inOrderTraverse($arr);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '<Br>';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	function inOrderTraverse($node){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    if(empty($node)){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        return;
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    }
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //左节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    inOrderTraverse($node['lChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //输出值
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    print_r($node['data']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //右节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    inOrderTraverse($node['rChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	}
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>
로그인 후 복사



遍历算法三:后序遍历二叉树


<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	<br />

</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;white-space:normal;">
	<?php
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	//后序遍历二叉树算法
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '后序遍历二叉树算法:';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	postOrderTraverse($arr);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	echo '<Br>';
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	function postOrderTraverse($node){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    if(empty($node)){
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	        return;
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    }
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //左节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    postOrderTraverse($node['lChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //右节点
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    postOrderTraverse($node['rChild']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    //输出值
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	    print_r($node['data']);
</p>

<p style="box-sizing:border-box;margin-top:0px;margin-bottom:10px;">
	}
</p>
로그인 후 복사
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿