PHP实现二叉树的深度优先与广度优先遍历方法
本文实例讲述了PHP实现二叉树的深度优先与广度优先遍历方法。分享给大家供大家参考。具体如下:
#二叉树的广度优先遍历 #使用一个队列实现 classNode{ public$data=null; public$left=null; public$right=null; } #@param$btree二叉树根节点 functionbreadth_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; } #深度优先遍历,使用一个栈实现 functiondepth_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=newNode(); $node1=newNode(); $node2=newNode(); $node3=newNode(); $node4=newNode(); $node5=newNode(); $node6=newNode(); $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程序设计有所帮助。