• php 二叉树遍历


    二叉树是逻辑结构,二叉链表是二叉树的物理实现,是它的一种存储结构。两者之间的关系属于概念和实现,抽象和具体的关系。

    • 前序遍历:根节点->左子树->右子树
    • 中序遍历:左子树->根节点->右子树
    • 后序遍历:左子树->右子树->根节点

    深度优先遍历:

        前序遍历:10 8 7 9 12 11 13
        中序遍历:7 8 9 10 11 12 13
        后序遍历:7 9 8 11 13 12 10

    广度优先遍历:

        层次遍历:10 8 12 7 9 11 13

    二叉树的深度优先遍历的非递归的通用做法是采用栈,广度优先遍历的非递归的通用做法是采用队列。

    <?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());
  • 相关阅读:
    C++ Compress Floder
    C语言: 两个int变量相除,结果保留两位小数
    过滤Windows文件名中的非法字符
    判断两个vector是否相等
    顶级操盘手是怎样准确把握入场时机的
    短线黑马选股绝技
    短线黑马选股绝技 一
    每日一招:短线炒股实用技巧
    高抛低吸T+0操作要领(目前行情短线炒作的必备技能)
    如何买开盘即涨停的个股
  • 原文地址:https://www.cnblogs.com/yangzailu/p/12572556.html
Copyright © 2020-2023  润新知