php樹的遍歷
㈠ 什麼是樹的層次遍歷 要求通俗易懂
二叉樹的層次遍歷是指從二叉樹的第一層(根節點)開始,從上至下逐層遍歷,在同一層中,則按照從左到右的順序對節點逐個訪問。在逐層遍歷過程中,按從頂層到底層的次序訪問樹中元素,在同一層中,從左到右進行訪問。
其思想為:用一個隊列保存被訪問的當前節點的左右孩子以實現層序遍歷。在進行層次遍歷的時候,設置一個隊列結構,遍歷從二叉樹的根節點開始,首先將根節點指針入隊列,然後從隊頭取出一個元素,每取一個元素,執行下面兩個操作:
1、訪問該元素所指向的節點。
2、若該元素所指節點的左右孩子節點非空,則將該元素所指節點的左孩子指針和右孩子指針順序入隊。此過程不斷進行,當隊列為空時,二叉樹的層次遍歷結束。
(1)php樹的遍歷擴展閱讀
由於遍歷中所使用的數據結構是一個隊列而不是棧,因此寫一個按層遍歷的遞歸程序很困難。如下程序用來對二叉樹進行逐層遍歷,它採用了隊列數據結構。隊列中的元素指向二叉樹節點。當然,也可以採用公式化隊列。
程序中,僅當樹非空時,才進入w h i l e循環。首先訪問根節點,然後把其子節點加到隊列中。當隊列添加操作失敗時,由Add引發NoMem異常,由於沒有捕獲該異常,因此當異常發生時函數將退出。在把t的子節點加入隊列後,要從隊列中刪除t元素。
㈡ 數據結構中"遍歷"是什麼意思
所謂遍歷,是指沿著某條搜索路線,依次對樹中每個結點均做一次且僅做一次訪問。訪問結點旅悄備所做的操作依賴於具體的應用問題。 遍歷是二叉樹上最重要的運算之一,是二叉樹上進行其它運算之基礎。
(2)php樹的遍歷擴展閱讀:
樹的遍歷是樹的一種重要的運算。所謂遍歷是指對樹中所有結點的信息的訪問,即依次對樹中每個結點訪問一次且僅訪問一次。
在數據結構中三種最重要的遍歷方式分別稱為前序遍歷、中序遍歷和後序遍歷。
以下是三種遍歷的方法:
1、中序:若二叉樹非空,則依次執行如下操作:
⑴遍歷左子樹;
⑵訪問根結點;
⑶遍歷右子樹。
2、先序遍歷:若二叉樹非空,則依次執行如下操作:
⑴ 訪問根結點;
⑵ 遍歷左子樹;
⑶ 遍歷右子樹。
3、後序遍歷:若二叉樹非空,則依次執行如下操作:
⑴運猛遍歷左子樹;
⑵遍歷右子樹;
⑶訪問根結點。
以這3種方式遍歷一棵樹時,若按訪問結點的先後次序將結點排列起來,就可分別拆毀得到樹中所有結點的前序列表、中序列表和後序列表。相應的結點次序分別稱為結點的前序、中序和後序。
㈢ 如何遍歷樹的所有節點
PrivateSubButton1_Click(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesButton1.Click
CallTreeView(Me.TreeView1)
EndSub
PrivateSubForTreeNode(ByValTempNodeAsTreeNode)
MessageBox.Show(TempNode.FullPath)
雀前嫌DimaNodeAsTreeNode
ForEachaNodeInTempNode.Nodes
ForTreeNode(aNode)
Next
EndSub
悔棗PrivateSubCallTreeView(ByValaTreeViewAsTreeView)
DimTempNodeAsTreeNode
ForEachTempNodeInaTreeView.Nodes
頃手ForTreeNode(TempNode)
Next
EndSub
㈣ php樹型數組如何轉換成列表數組
public function tree(&$list, $parent) {
//保證找到的元素都放在一個數組$tree內,應該是$tree在所有的tree函數都共享
static $tree;
//遍歷該數組,找到parent值為當前傳遞進來的$parent_id;
foreach($list as $row) {
//判斷
if($row['parent'] == $parent) {
//保存起來
$tree[] = $row;
//依據當前所找到的分類缺斗,找到其子節點,操作相同,遞歸完成
$this->稿扮做tree($list, $row['id']);
}
}
return $tree;
}
你把你的數組帶進去,這個是在類裡面實現的,如果你只是想單獨用個方法,你就把鍵衡public以及'$this->'去掉就行了
㈤ php 一維數組怎麼遍歷html
php遍歷數組的4種方法總結,它分分別是foreach循環、each函數、list函數、for循環,需要的朋友可以參考下
在php中可以用來遍歷數組的函數有很多,如有:for語句、list、each、foreach這四個函數,這也是在php中遍歷數組的幾個主要的函數,下面我來給大家介紹。
foreach遍歷數組
我們在運用數組時,常常要遍歷數組並獲得各個鍵或者元素值,php提供了一些專門遍歷數組的函數。這里先介紹foreach遍歷數組函數的用法。
結構形式:
復制代碼 代碼如下:
foreach ( array_expression as $value ) statement
/* array_expression是要遍歷的數組
as作用是將數組的值賦給$value
statement是後續語句
*/
實例1:
復制代碼 代碼如下:
'白色' ,
'black' => '黑色' ,
'red' => '紅色' ,
'green' => '綠色',
'yellow' => '黃色');
foreach( $color as $c) echo $c ."
";
?>
通過foreach不僅可以獲得元素的值也可以獲得鍵名,結構形式:
復制代碼 代碼如下:
foreach ( array_expression as $key => $value ) statement
將以上實例中第7行的代碼:
復制代碼 代碼如下:
foreach( $color as $c) echo $c ."<br>";
改為:
復制代碼 代碼如下:
foreach( $color as $key => $c) echo $key.$c ."<br>";
each遍歷數組
遍歷數組是php數組操作一個重要的環節,除了前面提到的foreach函數,這里再介紹一個遍歷數組的函數-each()。
用each()函數可以輸出當前指針位置的鍵名和對應的元素值。可以使用」0″或」key」來訪問鍵名(標識符),用」1″或」value」訪問標識符對應的值。
實例:
復制代碼 代碼如下:
<?php
$languages=array(1=-->"php",
5=>"html",
10=>"css");
$a=each($languages); /* 第一次遍歷數組 */
echo $a[0] ."t";
echo $a[1] ."<br>";
$a=each($languages); /* 第二次遍歷數組 */
echo $a[key] ."t";
echo $a[value];
?>
list遍歷數組
函數list可以在遍歷數組時一次賦給變數,通常和each()函數配合使用。用list()函數使訪問each()返回的鍵和值變得更加簡單了。
實例:
復制代碼 代碼如下:
<?php
$date=array(1=-->"Monday",
2=>"Tuesday",
3=>"Wednesday");
list($key,$value)=each($date); /* 遍歷函數 */
echo "$key $value" ."<br>"; /* 輸出第一個數組 */
$next=next($date); /* 指針後移 */
echo "$next";
?>
ps:list()函數剛好與array()函數相反,array()將一系列數據構造成數組,而list()則將數組拆分成數據。
for遍歷數組
除了php預定義的一些遍歷數組函數,我們還可以利用for語句的循環特性將數組遍歷輸出。下面給出例子:
復制代碼 代碼如下:
<?php
$a[]="張學友"; /* 定義數組 */
$a[]="劉德華";
$a[]="黎明";
$a[]="郭富城";
$s=count($a); /* 統計數組個數 */
for($i=0;$i<$s;$i++){ /* 遍歷數組 */
echo $a[$i] ."<br /-->"; /* 顯示數組 */
}
?>
㈥ 什麼是樹的中序遍歷有什麼作用
中序序列。
中序遍歷首先遍歷左子樹,然後訪問根結點,最後遍歷右子樹。若二叉樹為空則結束返回,否則:
(1)中序遍歷左子樹
(2)訪問根結點
(3)中序遍銀盯歷右子樹
如圖所示二叉樹,中序遍歷結果:DBEAFCG
中序遍歷數學表達式形式:
當對一棵數學表達式樹進行中序,前序和後序遍歷時,就分別得到表達式的中綴、前綴和後綴形式。中綴(infix)形式即鋒肆和平時所書寫的數學表達式形式,在這種形式中,每個二元操作符(也就是有兩個操作數的操作符)出現在左操作數之後,右操作數之前。在使用中綴形式時,可能會產生一些歧義。
例如,x+y ×z可以理解為(x+y) ×z或x+ (y ×z)。為了避免這種歧義,可對操作符賦於優先順序並採用優先順序雹腔規則來分析中綴表達式。在完全括弧化的中綴表達式中,每個操作符和相應的操作數都用一對括弧括起來。
更甚者把操作符的每個操作數也都用一對括弧括起來。如( (x) + (y) ),( (x) + ( (y) * (z) ) )和( ( (x) + (y) ) * ( (y) + (z) ) ) * (w)。
㈦ 樹有前序遍歷、中序遍歷、後序遍歷。請問先序遍歷、層次序列分別是什麼
先序就是前序遍歷:先根,再左子樹,然銷檔後右子樹
層肆陸次序就是:根,第二層從左到右,第三次從虧雹亂左到右...
㈧ 數據結構——樹和森林的遍歷方法
1、樹的遍歷的定義 :以某種方式訪問樹中的每一個結點,且僅訪問一次。 樹的遍歷主要亮做有先根遍歷和後根遍歷。
2、(1)先根遍歷: 若樹非空,則先訪問根結點,再按照從左到右的順序遍歷根結點的每一棵子樹。這個訪問順序與這棵樹對應的二叉樹的先序遍歷順序相同。
(2)後根遍歷: 若樹非空,則按照從左到右的順序遍歷根結點的每一棵子樹,之後再訪問根結點。其訪問順序與這棵樹對應的二叉樹的中序遍歷順序相同。
Example one:
根據以上這幅圖有如下結果:
注意到我們並拆山沒有定義一般樹的中根遍歷,因為子結點該怎麼分兩部分並沒有定義,所以只定旅鍵中義先、後根。
Example two:
1、前序遍歷
前序遍歷的定義為:
(1)訪問森林中第一棵樹的根結點;
(2)前序遍歷第一棵樹的根結點的子樹;
(3)前序遍歷去掉第一棵樹後的子森林。
2、中序遍歷
中序遍歷的定義為:
(1)中序遍歷第一棵樹的根結點的子樹;
(2)訪問森林中第一棵樹的根結點;
(3)中序遍歷去掉第一棵樹後的子森林。
森林與二叉樹的轉換
樹轉化為二叉樹:
⑴ 加虛線(或者粗實線)。在樹的每層按從「左至右」的順序在兄弟結點之間加虛線相連。
⑵ 去連線。除最左的第一個子結點(長子節點)外,父結點與所有其它子結點的連線都去掉。
森林轉換成二叉樹:
當一般的樹轉換成二叉樹後,二叉樹的右子樹必為空。若把森林中的第二棵樹(轉換成二叉樹後)的根結點作為第一棵樹(二叉樹)的根結點的兄弟結點,則可導出森林轉換成二叉樹的轉換步驟如下:
(1)、把每棵樹轉換為二叉樹
(2)、按給出的森林中樹的次序,第一棵樹不動,從第二棵樹開始,依次把後一棵樹的根結點作為前一棵二叉樹的根結點的右孩子,用線連起來,當所有的二叉樹連接起來後,就得到了由森林轉換來的二叉樹。
㈨ php 如何做排列組合
原理相當於自己建個樹,不停地在末尾里添加上子節點,最後遍歷整個樹。
代碼如下:
<?php
$str='1=12,2=34,3=14,4=23';
$_str=explode(',',$str);
$_str=array_reverse($_str);
$_key=array();
$tree=array();
foreach($_str as $v){
$str=explode('=',$v);
$_key[]=$str[0];
$str=str_split($str[1]);
$_tree=array();
foreach($str as $node){
if(empty($tree)):
$_tree[][]=$node;
else:
foreach($tree as $_node) $_tree[]=str_split(implode($_node).$node);
endif;
}
$tree=$_tree;
}
foreach($tree as $v){
$str=array();
foreach($v as $_k=>$_v) $str[]=$_key[$_k].'='.$_v;
echo implode(',',array_reverse($str)),'<br>';
}
?>
㈩ 如何用循環遍歷樹
#include"stdio.h"
#include"stdlib.h"
typedef struct BiTNode
{ char data;
struct BiTNode *lchild,*rchild;
}*BiTree,BiTNode;
BiTree CreateBiTree(BiTree &T) {
// 按先序次序輸入二叉樹中結點的如跡值(一個字元),空格字元表示空樹,
// 構造二叉鏈扮數表表示的二叉樹T。
char ch;
scanf("%c",&ch);
if (ch==' ') T = NULL;
else {
T = (BiTNode*)malloc(sizeof(BiTNode));
T->data = ch; // 生成根渣缺並結點
CreateBiTree(T->lchild); // 構造左子樹
CreateBiTree(T->rchild); // 構造右子樹
}
return T;
} // CreateBiTree
int PreOrderTraverse( BiTree T,char(*visit)(char e) ) {
// 採用二叉鏈表存儲結構,Visit是對數據元素操作的應用函數,
// 先序遍歷二叉樹T的遞歸演算法,對每個數據元素調用函數Visit。
if (T) {
if (visit(T->data))
if (PreOrderTraverse(T->lchild, visit))
if (PreOrderTraverse(T->rchild, visit)) return 1;
return 0;
} else return 1;
} // PreOrderTraverse
char visit ( char e )
{printf("%c", e );}
int main()
{BiTree T;
CreateBiTree(T);
PreOrderTraverse(T, visit);
return 0;
}