二叉树遍历算法

Jun 05, 2016 am 11:50 AM

<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 までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Laravelでフラッシュセッションデータを使用します Laravelでフラッシュセッションデータを使用します Mar 12, 2025 pm 05:08 PM

Laravelは、直感的なフラッシュメソッドを使用して、一時的なセッションデータの処理を簡素化します。これは、アプリケーション内に簡単なメッセージ、アラート、または通知を表示するのに最適です。 データは、デフォルトで次の要求のためにのみ持続します。 $リクエスト -

PHPのカール:REST APIでPHPカール拡張機能を使用する方法 PHPのカール:REST APIでPHPカール拡張機能を使用する方法 Mar 14, 2025 am 11:42 AM

PHPクライアントURL(CURL)拡張機能は、開発者にとって強力なツールであり、リモートサーバーやREST APIとのシームレスな対話を可能にします。尊敬されるマルチプロトコルファイル転送ライブラリであるLibcurlを活用することにより、PHP Curlは効率的なexecuを促進します

Laravelテストでの簡略化されたHTTP応答のモッキング Laravelテストでの簡略化されたHTTP応答のモッキング Mar 12, 2025 pm 05:09 PM

Laravelは簡潔なHTTP応答シミュレーション構文を提供し、HTTP相互作用テストを簡素化します。このアプローチは、テストシミュレーションをより直感的にしながら、コード冗長性を大幅に削減します。 基本的な実装は、さまざまな応答タイプのショートカットを提供します。 Illuminate \ support \ facades \ httpを使用します。 http :: fake([[ 'google.com' => 'hello world'、 'github.com' => ['foo' => 'bar']、 'forge.laravel.com' =>

Codecanyonで12の最高のPHPチャットスクリプト Codecanyonで12の最高のPHPチャットスクリプト Mar 13, 2025 pm 12:08 PM

顧客の最も差し迫った問題にリアルタイムでインスタントソリューションを提供したいですか? ライブチャットを使用すると、顧客とのリアルタイムな会話を行い、すぐに問題を解決できます。それはあなたがあなたのカスタムにより速いサービスを提供することを可能にします

ストレージを使用してLaravelでファイルのダウンロードを発見してください::ダウンロード ストレージを使用してLaravelでファイルのダウンロードを発見してください::ダウンロード Mar 06, 2025 am 02:22 AM

ストレージ:: Laravelフレームワークのダウンロード方法は、ファイルストレージの抽象化を管理しながら、ファイルのダウンロードを安全に処理するための簡潔なAPIを提供します。 サンプルコントローラーでストレージ::ダウンロード()を使用する例は次のとおりです。

PHPにおける後期静的結合の概念を説明します。 PHPにおける後期静的結合の概念を説明します。 Mar 21, 2025 pm 01:33 PM

記事では、PHP 5.3で導入されたPHPの後期静的結合(LSB)について説明し、より柔軟な継承を求める静的メソッドコールのランタイム解像度を可能にします。 LSBの実用的なアプリケーションと潜在的なパフォーマ

PHPロギング:PHPログ分析のベストプラクティス PHPロギング:PHPログ分析のベストプラクティス Mar 10, 2025 pm 02:32 PM

PHPロギングは、Webアプリケーションの監視とデバッグ、および重要なイベント、エラー、ランタイムの動作をキャプチャするために不可欠です。システムのパフォーマンスに関する貴重な洞察を提供し、問題の特定に役立ち、より速いトラブルシューティングをサポートします

Laravelサービスプロバイダーを登録および使用する方法 Laravelサービスプロバイダーを登録および使用する方法 Mar 07, 2025 am 01:18 AM

Laravelのサービスコンテナとサービスプロバイダーは、そのアーキテクチャの基本です。 この記事では、サービスコンテナ、詳細サービスプロバイダーの作成、登録、および実用的な使用法を例で説明します。 Oveから始めます

See all articles