本文实例讲述了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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
#二叉树的广度优先遍历
#使用一个队列实现
class Node {
public $data = null;
public $left = null;
public $right = null;
}
#@param $btree 二叉树根节点
function breadth_first_traverse( $btree ) {
$traverse_data = array ();
$queue = array ();
array_unshift ( $queue , $btree ); #根节点入队
while (! empty ( $queue )) { #持续输出节点,直到队列为空
$cnode = array_pop ( $queue ); #队尾元素出队
$traverse_data [] = $cnode ->data;
#左节点先入队,然后右节点入队
if ( $cnode ->left != null) array_unshift ( $queue , $cnode ->left);
if ( $cnode ->right != null) array_unshift ( $queue , $cnode ->right);
}
return $traverse_data ;
}
#深度优先遍历,使用一个栈实现
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 );
|
希望本文所述对大家的php程序设计有所帮助。