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

5年以前  |  阅读数:1140 次  |  编程语言:PHP 

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


    #二叉树的广度优先遍历
    #使用一个队列实现
    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程序设计有所帮助。

 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
贪吃蛇
文件下载
双位运算符
发送邮件
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
提取后缀名
年的日历图
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例