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());
  • 相关阅读:
    toj 2819 Travel
    toj 2807 Number Sort
    zoj 2818 Prairie dogs IV
    zoj 1276 Optimal Array Multiplication Sequence
    toj 2802 Tom's Game
    toj 2798 Farey Sequence
    toj 2815 Searching Problem
    toj 2806 Replace Words
    toj 2794 Bus
    css截取字符
  • 原文地址:https://www.cnblogs.com/deverz/p/9915986.html
Copyright © 2011-2022 走看看