• 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());
  • 相关阅读:
    对比<input type="text" id="">和<asp:TextBox runat="server" ID="">
    EasyUI 启用行内编辑
    水平居中和transform: translateY(-50%) 实现元素垂直居中效果
    表头的一些解释
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">详解
    访问远程桌面 步骤
    jQuery EasyUI API 中文文档
    用JavaScript方式创建easyUI datagrid Column Group(列组)
    jquery中innerheight outerHeight()与height()的区别
  • 原文地址:https://www.cnblogs.com/deverz/p/9915986.html
Copyright © 2020-2023  润新知