二叉树 - 含PHP实现 - 学习/实践

1.应用场景

主要用于学习二叉树,以及由其衍生出来的各种二叉树,

同时使用PHP构造二叉树, 帮助更加理解数据结构与算法。

2.学习/操作

1.文档阅读

php实现二叉树——构造_sinat_36421482的博客-CSDN博客_php 构建二叉树

23 | 二叉树基础(上):什么样的二叉树适合用数组来存储?-极客时间

24 | 二叉树基础(下):有了如此高效的散列表,为什么还需要二叉树?-极客时间

3 分钟理解完全二叉树、平衡二叉树、二叉查找树 - 掘金

2. 整理输出

2.1 二叉树 即 B-Tree/B树

TBD

2.2 二叉查找树 

也叫二叉搜索树, 二叉排序树

2.3 平衡二叉树

2.4 平衡二叉查找树

TBD

代码构造

<?php

//树节点类
// 1、var在类外用报错:如果不是在类中,用var定义变量是错的。
// 2、类属性必须带限定词:php中类属性必须定义为公有,受保护,私有之一。所以如果没有那三个修饰符,必须用var,var是public的别名。

class TreeNode{

    var $val;
    var $left = NULL;
    var $right = NULL;

    function __construct($val){
        $this->val = $val;

    }

    //构造二叉树
    function createBinaryTree(TreeNode $lchird = NULL, TreeNode $rchird = NULL){

        if(!is_null($lchird))

            $this->left = $lchird;

        if(!is_null($rchird))

            $this->right = $rchird;

    }

}

$d = new TreeNode('D');
$e = new TreeNode('E');
$f = new TreeNode('F');
$c = new TreeNode('C');
$b = new TreeNode('B');
$a = new TreeNode('A');
$a->createBinaryTree($b,$c);
$b->createBinaryTree($d,$e);
$c->createBinaryTree(NULL,$f);

// var_dump($a); // 不方面查看结构
// var_dump((array)$a); // 不方便查看结构
echo (json_encode($a));
// {"val":"A","left":{"val":"B","left":{"val":"D","left":null,"right":null},"right":{"val":"E","left":null,"right":null}},"right":{"val":"C","left":null,"right":{"val":"F","left":null,"right":null}}}

输出:

这里写图片描述

后续补充

...

3.问题/补充

1. 动态数据结构支持动态的数据插入、删除、查找操作,除了红黑树,我们前面还学习过哪些呢?能对比一下各自的优势、劣势,以及应用场景吗?

散列表:插入删除查找都是O(1), 是最常用的,但其缺点是不能顺序遍历以及扩容缩容的性能损耗。

适用于那些不需要顺序遍历,数据更新不那么频繁的。

跳表:插入删除查找都是O(logn), 并且能顺序遍历。缺点是空间复杂度O(n)。

适用于不那么在意内存空间的,其顺序遍历和区间查找非常方便。

红黑树:插入删除查找都是O(logn), 中序遍历即是顺序遍历,稳定。缺点是难以实现,去查找不方便。其实跳表更佳,但红黑树已经用于很多地方了。

2. 动态数据结构

王争:

我看smallfly大牛好像对动态数据结构有些误解,可能其他同学也会有。

所以,我解释一下:

动态数据结构是支持动态的更新操作,里面存储的数据是时刻在变化的。

通俗一点讲,它不仅仅支持查询,还支持删除、插入数据。而且,这些操作都非常高效。

如果不高效,也就算不上是有效的动态数据结构了。

所以,这里的红黑树算一个,支持动态的插入、删除、查找,而且效率都很高。

链表、队列、栈实际上算不上,因为操作非常有限,查询效率不高

那现在你再想一下还有哪些支持动态插入、删除、查找数据并且效率都很高的的数据结构呢??

个人回答:

跳表

4.参考

php实现二叉树——构造_sinat_36421482的博客-CSDN博客_php 构建二叉树  //php实现二叉树——构造

后续补充

...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值