首页 > 开发 > PHP > 正文

PHP实现二叉树的深度优先与广度优先遍历方法

2024-05-04 23:39:19
字体:
来源:转载
供稿:网友

这篇文章主要介绍了PHP实现二叉树的深度优先与广度优先遍历方法,涉及php针对二叉树进行遍历的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下

本文实例讲述了PHP实现二叉树的深度优先与广度优先遍历方法。分享给大家供大家参考。具体如下:

 

 
  1. #二叉树的广度优先遍历 
  2. #使用一个队列实现 
  3. class Node { 
  4. public $data = null
  5. public $left = null
  6. public $right = null
  7. #@param $btree 二叉树根节点 
  8. function breadth_first_traverse($btree) { 
  9. $traverse_data = array(); 
  10. $queue = array(); 
  11. array_unshift($queue, $btree); #根节点入队 
  12. while (!empty($queue)) { #持续输出节点,直到队列为空 
  13. $cnode = array_pop($queue); #队尾元素出队 
  14. $traverse_data[] = $cnode->data; 
  15. #左节点先入队,然后右节点入队 
  16. if ($cnode->left != null) array_unshift($queue, $cnode->left); 
  17. if ($cnode->right != null) array_unshift($queue, $cnode->right); 
  18. return $traverse_data; 
  19. #深度优先遍历,使用一个栈实现 
  20. function depth_first_traverse($btree) { 
  21. $traverse_data = array(); 
  22. $stack = array(); 
  23. array_push($stack, $btree); 
  24. while (!empty($stack)) { 
  25. $cnode = array_pop($stack); 
  26. $traverse_data[] = $cnode->data; 
  27. if ($cnode->right != null) array_push($stack, $cnode->right); 
  28. if ($cnode->left != null) array_push($stack, $cnode->left); 
  29. return $traverse_data; 
  30. $root = new Node(); 
  31. $node1 = new Node(); 
  32. $node2 = new Node(); 
  33. $node3 = new Node(); 
  34. $node4 = new Node(); 
  35. $node5 = new Node(); 
  36. $node6 = new Node(); 
  37. $root->data = 1; 
  38. $node1->data = 2; 
  39. $node2->data = 3; 
  40. $node3->data = 4; 
  41. $node4->data = 5; 
  42. $node5->data = 6; 
  43. $node6->data = 7; 
  44. $root->left = $node1; 
  45. $root->right = $node2; 
  46. $node1->left = $node3; 
  47. $node1->right = $node4; 
  48. $node2->left = $node5; 
  49. $node2->right = $node6; 
  50. $traverse = breadth_first_traverse($root); 
  51. print_r($traverse); 
  52. echo ""
  53. $traverse = depth_first_traverse($root); 
  54. print_r($traverse); 

希望本文所述对大家的php程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表