PHP實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先與廣度優(yōu)先遍歷方法
更新時(shí)間:2015年09月28日 15:18:01 作者:風(fēng)雨征途2012
這篇文章主要介紹了PHP實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先與廣度優(yōu)先遍歷方法,涉及php針對(duì)二叉樹(shù)進(jìn)行遍歷的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
本文實(shí)例講述了PHP實(shí)現(xiàn)二叉樹(shù)的深度優(yōu)先與廣度優(yōu)先遍歷方法。分享給大家供大家參考。具體如下:
#二叉樹(shù)的廣度優(yōu)先遍歷
#使用一個(gè)隊(duì)列實(shí)現(xiàn)
class Node {
public $data = null;
public $left = null;
public $right = null;
}
#@param $btree 二叉樹(shù)根節(jié)點(diǎn)
function breadth_first_traverse($btree) {
$traverse_data = array();
$queue = array();
array_unshift($queue, $btree); #根節(jié)點(diǎn)入隊(duì)
while (!empty($queue)) { #持續(xù)輸出節(jié)點(diǎn),直到隊(duì)列為空
$cnode = array_pop($queue); #隊(duì)尾元素出隊(duì)
$traverse_data[] = $cnode->data;
#左節(jié)點(diǎn)先入隊(duì),然后右節(jié)點(diǎn)入隊(duì)
if ($cnode->left != null) array_unshift($queue, $cnode->left);
if ($cnode->right != null) array_unshift($queue, $cnode->right);
}
return $traverse_data;
}
#深度優(yōu)先遍歷,使用一個(gè)棧實(shí)現(xiàn)
function depth_first_traverse($btree) {
$traverse_data = array();
$stack = array();
array_push($stack, $btree);
while (!empty($stack)) {
$cnode = array_pop($stack);
$traverse_data[] = $cnode->data;
if ($cnode->right != null) array_push($stack, $cnode->right);
if ($cnode->left != null) array_push($stack, $cnode->left);
}
return $traverse_data;
}
$root = new Node();
$node1 = new Node();
$node2 = new Node();
$node3 = new Node();
$node4 = new Node();
$node5 = new Node();
$node6 = new Node();
$root->data = 1;
$node1->data = 2;
$node2->data = 3;
$node3->data = 4;
$node4->data = 5;
$node5->data = 6;
$node6->data = 7;
$root->left = $node1;
$root->right = $node2;
$node1->left = $node3;
$node1->right = $node4;
$node2->left = $node5;
$node2->right = $node6;
$traverse = breadth_first_traverse($root);
print_r($traverse);
echo "";
$traverse = depth_first_traverse($root);
print_r($traverse);
希望本文所述對(duì)大家的php程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:
- PHP Class&Object -- PHP 自排序二叉樹(shù)的深入解析
- PHP實(shí)現(xiàn)的線索二叉樹(shù)及二叉樹(shù)遍歷方法詳解
- php實(shí)現(xiàn)的二叉樹(shù)遍歷算法示例
- PHP構(gòu)造二叉樹(shù)算法示例
- PHP實(shí)現(xiàn)繪制二叉樹(shù)圖形顯示功能詳解【包括二叉搜索樹(shù)、平衡樹(shù)及紅黑樹(shù)】
- PHP實(shí)現(xiàn)從上往下打印二叉樹(shù)的方法
- PHP基于非遞歸算法實(shí)現(xiàn)先序、中序及后序遍歷二叉樹(shù)操作示例
- PHP獲取二叉樹(shù)鏡像的方法
- PHP實(shí)現(xiàn)判斷二叉樹(shù)是否對(duì)稱的方法
- PHP實(shí)現(xiàn)二叉樹(shù)深度優(yōu)先遍歷(前序、中序、后序)和廣度優(yōu)先遍歷(層次)實(shí)例詳解
- PHP排序二叉樹(shù)基本功能實(shí)現(xiàn)方法示例
相關(guān)文章
PHP實(shí)現(xiàn)的簡(jiǎn)單四則運(yùn)算計(jì)算器功能示例
這篇文章主要介紹了PHP實(shí)現(xiàn)的簡(jiǎn)單四則運(yùn)算計(jì)算器功能,結(jié)合實(shí)例形式分析了PHP基于堆棧實(shí)現(xiàn)的表達(dá)式運(yùn)算功能,需要的朋友可以參考下2017-12-12
thinkphp 一個(gè)頁(yè)面使用2次分頁(yè)的實(shí)現(xiàn)方法
thinkphp內(nèi)置ORG.Util.Page方法分頁(yè),使分頁(yè)變得非常簡(jiǎn)單快捷。 但是如果一個(gè)頁(yè)面里需要使用2次分頁(yè),就會(huì)產(chǎn)生沖突,這里先記錄下百度來(lái)的解決辦法。需要的朋友可以參考下2013-07-07
使用ThinkPHP自帶的Http類(lèi)下載遠(yuǎn)程圖片到本地的實(shí)現(xiàn)代碼
Thinkphp是國(guó)人開(kāi)發(fā)一個(gè)PHP框架,該框架相比國(guó)外的一些框架也毫不遜色。強(qiáng)大的ORM,插件,分組等功能讓人愛(ài)不釋手。2011-08-08
PHP使用imagick擴(kuò)展實(shí)現(xiàn)合并圖像的方法
這篇文章主要介紹了PHP使用imagick擴(kuò)展實(shí)現(xiàn)合并圖像的方法,結(jié)合實(shí)例形式分析了php基于imagick擴(kuò)展處理圖片的具體步驟與相關(guān)操作技巧,需要的朋友可以參考下2017-04-04
功能強(qiáng)大的PHP POST提交數(shù)據(jù)類(lèi)
這篇文章主要為大家詳細(xì)介紹了功能強(qiáng)大的PHP POST提交數(shù)據(jù)類(lèi),代碼簡(jiǎn)潔且具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-07-07

