本文实例讲述了PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法。分享给大家供大家参考,具体如下:
先来看看前序遍历、中序遍历与后序遍历原理图:
根据树的前序遍历和中序遍历构造树并输出后序遍历代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
<?php
class BinaryTreeNode{
public $m_value ;
public $m_left ;
public $m_right ;
}
function ConstructCore( $preorder , $inorder ){
if ( count ( $preorder )!= count ( $inorder ) || count ( $preorder )==0 || count ( $inorder )==0)
return null;
$headNode = new BinaryTreeNode;
$headNode ->m_value= $preorder [0];
if ( count ( $preorder )==1){
$headNode ->m_left=null;
$headNode ->m_right=null;
return $headNode ;
}
array_shift ( $preorder );
$pos = array_search ( $headNode ->m_value, $inorder );
$leftin = array_slice ( $inorder ,0, $pos );
$rightin = array_slice ( $inorder , $pos +1);
$leftpre = array_slice ( $preorder ,0, $pos );
$rightpre = array_slice ( $preorder , $pos );
$headNode ->m_left=ConstructCore( $leftpre , $leftin );
$headNode ->m_right=ConstructCore( $rightpre , $rightin );
return $headNode ;
}
$pre = array (1,2,4,7,3,5,6,8);
$in = array (4,7,2,1,5,3,8,6);
$tree =ConstructCore( $pre , $in );
function tail( $tree ){
if ( $tree ->m_right!=null)
echo tail( $tree ->m_right);
if ( $tree ->m_left!=null)
echo tail( $tree ->m_left);
echo $tree ->m_value;
}
tail( $tree );
?>
|
运行结果:
1
|
86537421
|
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/jingbing082619/article/details/47373147