二叉樹遍曆,是值從根節點出發,按照某種次序依次訪問二叉樹中的所有節點,使得每個節點被訪問一次且僅被訪問依次。
圖是百度搜的。。。謝謝提供圖的英雄。。
前序走訪二叉樹:如果二叉樹為空白則返回,若二叉樹非空,則先遍曆左樹,再遍曆右樹,遍曆順序為ABCDEGF。
中序遍曆二叉樹:如果二叉樹為空白則返回,若二叉樹非空,則從根節點開始,中序遍曆根節點的左子樹,然後是訪問根節點,最後中序遍曆右子樹,遍曆順序為CBEGDFA。
後序遍曆二叉樹:如果二叉樹為空白則返回,若二叉樹非空,則從左至右先葉子後節點的訪問遍曆訪問左右子樹,最後是訪問根節點。訪問順序為CGEFDBA。
層序遍曆二叉樹:如果二叉樹為空白則返回,若二叉樹非空,則從樹的第一層,也就是根節點開始訪問,從上而下逐層遍曆,在同一層中,按照從左至右的順序對節點逐個訪問。訪問順序為ABCDEFG。
現在,我們用PHP代碼,來遍曆二叉樹結構。二叉樹是放一個大數組,每一個節點都有三個欄位,data表示這個節點的值,lChild表示這個節點的左邊子節點,rChild表示這個節點的右邊子節點。二叉樹的結構我們用上面那張圖。
二叉樹結構代碼如下:
//二叉樹
$arr = array(
'data' => 'A',
'lChild' => array(
'data' => 'B',
'lChild' => array(
'data' => 'C',
'lChild' => array(),
'rChild' => array(),
),
'rChild' => array(
'data' => 'D',
'lChild' => array(
'data' => 'E',
'lChild' => array(),
'rChild' => array(
'data' => 'G',
'lChild' => array(),
'rChild' => array(),
),
),
'rChild' => array(
'data' => 'F',
'lChild' => array(),
'rChild' => array(),
),
),
),
'rChild' => array(),
);
遍曆演算法一:前序走訪二叉樹
//前序走訪二叉樹演算法
echo '前序走訪二叉樹演算法:';
PreOrderTraverse($arr);
echo '
';
function PreOrderTraverse($node){
if(empty($node)){
return;
}
//輸出值
print_r($node['data']);
//左節點
PreOrderTraverse($node['lChild']);
//右節點
PreOrderTraverse($node['rChild']);
}
遍曆演算法二:中序遍曆二叉樹
//中序遍曆二叉樹演算法
echo '中序遍曆二叉樹演算法:';
inOrderTraverse($arr);
echo '
';
function inOrderTraverse($node){
if(empty($node)){
return;
}
//左節點
inOrderTraverse($node['lChild']);
//輸出值
print_r($node['data']);
//右節點
inOrderTraverse($node['rChild']);
}
遍曆演算法三:後序遍曆二叉樹
//後序遍曆二叉樹演算法
echo '後序遍曆二叉樹演算法:';
postOrderTraverse($arr);
echo '
';
function postOrderTraverse($node){
if(empty($node)){
return;
}
//左節點
postOrderTraverse($node['lChild']);
//右節點
postOrderTraverse($node['rChild']);
//輸出值
print_r($node['data']);
}