本文实例讲述了php实现的二叉树遍历算法。分享给大家供大家参考,具体如下:
今天使用php来实现二叉树的遍历
创建的二叉树如下图所示
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
<?php class Node { public $value ; public $child_left ; public $child_right ; } final class Ergodic { //前序遍历:先访问根节点,再遍历左子树,最后遍历右子树;并且在遍历左右子树时,仍需先遍历根节点,然后访问左子树,最后遍历右子树 public static function preOrder( $root ){ $stack = array (); array_push ( $stack , $root ); while (! empty ( $stack )){ $center_node = array_pop ( $stack ); echo $center_node ->value . ' ' ; //先把右子树节点入栈,以确保左子树节点先出栈 if ( $center_node ->child_right != null) array_push ( $stack , $center_node ->child_right); if ( $center_node ->child_left != null) array_push ( $stack , $center_node ->child_left); } } //中序遍历:先遍历左子树、然后访问根节点,最后遍历右子树;并且在遍历左右子树的时候。仍然是先遍历左子树,然后访问根节点,最后遍历右子树 public static function midOrder( $root ){ $stack = array (); $center_node = $root ; while (! empty ( $stack ) || $center_node != null) { while ( $center_node != null) { array_push ( $stack , $center_node ); $center_node = $center_node ->child_left; } $center_node = array_pop ( $stack ); echo $center_node ->value . ' ' ; $center_node = $center_node ->child_right; } } //后序遍历:先遍历左子树,然后遍历右子树,最后访问根节点;同样,在遍历左右子树的时候同样要先遍历左子树,然后遍历右子树,最后访问根节点 public static function endOrder( $root ){ $push_stack = array (); $visit_stack = array (); array_push ( $push_stack , $root ); while (! empty ( $push_stack )) { $center_node = array_pop ( $push_stack ); array_push ( $visit_stack , $center_node ); //左子树节点先入$pushstack的栈,确保在$visitstack中先出栈 if ( $center_node ->child_left != null) array_push ( $push_stack , $center_node ->child_left); if ( $center_node ->child_right != null) array_push ( $push_stack , $center_node ->child_right); } while (! empty ( $visit_stack )) { $center_node = array_pop ( $visit_stack ); echo $center_node ->value . ' ' ; } } } //创建二叉树 $a = new Node(); $b = new Node(); $c = new Node(); $d = new Node(); $e = new Node(); $f = new Node(); $g = new Node(); $h = new Node(); $i = new Node(); $a ->value = 'A' ; $b ->value = 'B' ; $c ->value = 'C' ; $d ->value = 'D' ; $e ->value = 'E' ; $f ->value = 'F' ; $g ->value = 'G' ; $h ->value = 'H' ; $i ->value = 'I' ; $a ->child_left = $b ; $a ->child_right = $c ; $b ->child_left = $d ; $b ->child_right = $g ; $c ->child_left = $e ; $c ->child_right = $f ; $d ->child_left = $h ; $d ->child_right = $i ; //前序遍历 Ergodic::preOrder( $a ); //结果是:A B D H I G C E F echo '<br/>' ; //中序遍历 Ergodic::midOrder( $a ); //结果是: H D I B G A E C F echo '<br/>' ; //后序遍历 Ergodic::endOrder( $a ); //结果是: H I D G B E F C A |
希望本文所述对大家PHP程序设计有所帮助。