PHP構(gòu)造二叉樹算法示例
更新時間:2017年06月21日 10:58:31 作者:火蜥蜴
本篇文章主要介紹了PHP構(gòu)造二叉樹算法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
樹(Tree)在數(shù)據(jù)結(jié)構(gòu)還是很重要的,這里表示二叉樹用括號表示法表示。先寫一個二叉樹節(jié)點類:
// 二叉樹節(jié)點
class BTNode {
public $data;
public $lchild = NULL;
public $rchild = NULL;
public function __construct($data) {
$this->data = $data;
}
}
然后構(gòu)造二叉樹:
function CreateBTNode(&$root,string $str)
{
$strArr = str_split($str);
$stack = [];
$p = NULL; // 指針
$top = -1;
$k = $j = 0;
$root = NULL;
foreach ($strArr as $ch) {
switch ($ch) {
case '(':
$top++;
array_push($stack, $p);
$k = 1;
break;
case ')':
array_pop($stack);
break;
case ',':
$k = 2;
break;
default:
$p = new BTNode($ch);
if($root == NULL) {
$root = $p;
} else {
switch ($k) {
case 1:
end($stack)->lchild = $p;
break;
case 2:
end($stack)->rchild = $p;
break;
}
}
break;
}
}
}
這里寫上一個打印二叉樹的函數(shù)(中序遍歷):
function PrintBTNode($node)
{
if($node != NULL) {
PrintBTNode($node->lchild);
echo $node->data;
PrintBTNode($node->rchild);
}
}
運行結(jié)果:
輸入一個字符串
"A(B(C,D),G(F))"

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- PHP Class&Object -- PHP 自排序二叉樹的深入解析
- PHP實現(xiàn)二叉樹的深度優(yōu)先與廣度優(yōu)先遍歷方法
- PHP實現(xiàn)的線索二叉樹及二叉樹遍歷方法詳解
- php實現(xiàn)的二叉樹遍歷算法示例
- PHP實現(xiàn)繪制二叉樹圖形顯示功能詳解【包括二叉搜索樹、平衡樹及紅黑樹】
- PHP實現(xiàn)從上往下打印二叉樹的方法
- PHP基于非遞歸算法實現(xiàn)先序、中序及后序遍歷二叉樹操作示例
- PHP獲取二叉樹鏡像的方法
- PHP實現(xiàn)判斷二叉樹是否對稱的方法
- PHP實現(xiàn)二叉樹深度優(yōu)先遍歷(前序、中序、后序)和廣度優(yōu)先遍歷(層次)實例詳解
- PHP排序二叉樹基本功能實現(xiàn)方法示例
相關(guān)文章
php post json參數(shù)的傳遞和接收處理方法
今天小編就為大家分享一篇php post json參數(shù)的傳遞和接收處理方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05
CodeIgniter框架鉤子機制實現(xiàn)方法【hooks類】
這篇文章主要介紹了CodeIgniter框架鉤子機制實現(xiàn)方法,結(jié)合具體的hooks類文件描述了鉤子機制的原理與相關(guān)操作技巧,需要的朋友可以參考下2018-08-08
ThinkPHP 3.2.3實現(xiàn)加減乘除圖片驗證碼
這篇文章主要為大家詳細(xì)介紹了ThinkPHP 3.2.3實現(xiàn)加減乘除圖片驗證碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-12-12
php fckeditor 調(diào)用的函數(shù)
showfck() 編輯器調(diào)用函數(shù)2009-06-06
thinkphp實現(xiàn)發(fā)送郵件密碼找回功能實例
這篇文章主要介紹了thinkphp實現(xiàn)發(fā)送郵件密碼找回功能的方法,以實例形式詳細(xì)講述了配置文件與功能代碼的實現(xiàn)方法,是非常實用的技巧,需要的朋友可以參考下2014-12-12

