zoukankan      html  css  js  c++  java
  • PHP二叉树的先序,中序,后续遍历实现方式

    <?php
    /********************************************************
     * 我写的PHP都是从C语言的数据结构中演化而来************************
     **************************************************************
     * /**
     *    ******二叉树图****
     *      A                    *
     *     * *                   *
     *    *   *                  *
     *   B     C                *
     *        *                   *
     *       *                    *
     *      D                    *
     *       *                    *
     *         *E                *
     ******************
     * PHP- 链式二叉树的遍历---先序遍历(根,左,右)-中序遍历(左,根,右)-后序遍历(左,右,根)
     * 先 A B C D E
     * 中 B A D E C
     * 后 B E D C A
     * @time
     * @Author
     ****/
    Class  BTreeNode
    {
        public $data; //数据域
        public $LeftHand = NULL; //左指针
        public $RightHand = NULL; //右指针
    
        public function __construct ($data)
        {
            if (!empty($data)) {
                $this->data = $data;
            }
        }
    
        //先序遍历(根,左,右)递归实现
        public function PreTraverseBTree ($BTree)
        {
            if (NULL !== $BTree) {
                var_dump($BTree->data);//
                if (NULL !== $BTree->LeftHand) {
                    $this->PreTraverseBTree($BTree->LeftHand); //递归遍历左树
                }
                if (NULL !== $BTree->RightHand) {
                    $this->PreTraverseBTree($BTree->RightHand); //递归遍历右树
                }
            }
        }
    
        //中序遍历(左,根,右)递归实现
        public function InTraverseBTree ($BTree)
        {
            if (NULL !== $BTree) {
                if (NULL !== $BTree->LeftHand) {
                    $this->InTraverseBTree($BTree->LeftHand); //递归遍历左树
                }
                var_dump($BTree->data); //
                if (NULL !== $BTree->RightHand) {
                    $this->InTraverseBTree($BTree->RightHand); //递归遍历右树
                }
            }
        }
    
        //后序遍历(左,右,根)递归实现
        public function FexTraverseBTree ($BTree)
        {
            if (NULL !== $BTree) {
                if (NULL !== $BTree->LeftHand) {
                    $this->FexTraverseBTree($BTree->LeftHand); //递归遍历左树
                }
                if (NULL !== $BTree->RightHand) {
                    $this->FexTraverseBTree($BTree->RightHand); //递归遍历右树
                }
                var_dump($BTree->data); //
            }
        }
    }
    
    header("Content-Type:text/html;charset=utf-8");
    echo '先的内存为' . var_dump(memory_get_usage());
    echo '<hr/>';
    //创建五个节点
    $A = new  BTreeNode('A');
    $B = new  BTreeNode('B');
    $C = new  BTreeNode('C');
    $D = new  BTreeNode('D');
    $E = new  BTreeNode('E');
    //连接形成一个二叉树
    $A->LeftHand = $B;
    $A->RightHand = $C;
    $C->LeftHand = $D;
    $D->RightHand = $E;
    
    //先序遍历
    echo '先序遍历的结果' . '<br>';
    $A->PreTraverseBTree($A);
    echo '<br/>中序遍历的结果' . '<br>';
    $A->InTraverseBTree($A);
    echo '<br/>后序列遍历的结果' . '<br/>';
    $A->FexTraverseBTree($A);
    echo '<hr/>';
    echo '后的内存为' . var_dump(memory_get_usage());
  • 相关阅读:
    快速排序理论---不含源码
    归并排序理论---不含源码
    希尔排序(shell)理论---不含源码
    Visual C++中error spawning cl.exe解决办法
    数据库的基础知识点---1
    冒泡排序的基础知识部分(不含源码)
    在虚拟机的Linux系统下安装wineqq
    数据变量的别名
    void*和void类型
    变量的作用域和连接性
  • 原文地址:https://www.cnblogs.com/deverz/p/9915986.html
Copyright © 2011-2022 走看看