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

 

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

深度优先遍历:

    前序遍历: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());

 

内容来源于网络如有侵权请私信删除

文章来源: 博客园

原文链接: https://www.cnblogs.com/yangzailu/p/12572556.html

你还没有登录,请先登录注册
  • 还没有人评论,欢迎说说您的想法!

相关课程