Perl implement Tree data structure (2)

Perl 二叉搜索树 用Perl 的一般方式实现了一个完整的二叉搜索树,有如下功能: 1. 插入,删除,搜索 2. 最大,最小值 3. 某节点的前序节点,后序节点 整个过程中更改了好几次: 1. 增加了parent 属性,可以方便的找到父节点,有利于前序后序节点的查找。 2. 最初节点不是都有left right 属性,只有在有子节点的情况下才出现,后来为了统一所有节点都加上这些属性,没有子节点的情 阅读详情

之前用struct实现的Tree不够灵活,重新使用hash来实现,更加灵活而且可以更改节点,进而实现平衡二叉树。

以下为程序代码:

use Data::Dumper;

my $tree = {};

add($tree,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60);
print Dumper $tree;
LMR($tree,$tree->{root});
RML($tree,$tree->{root});

sub add{
    my ($tree,$value) = @_;
    return if exists $tree->{$value};
    
    if (! exists $tree->{root}){
        $tree->{$value} = undef;
        $tree->{root} = $value;
        return
    }
    
    my $tmp = $tree->{root};
    while(defined $tmp){
        if ($value < $tmp){
            if (exists $tree->{$tmp}->{left}){
                $tmp = $tree->{$tmp}->{left}
            }
            else{
                $tree->{$value} = undef;
                $tree->{$tmp}->{left} = $value;
                return
            }
        }
        elsif($value > $tmp){
            if (exists $tree->{$tmp}->{right}){
                $tmp = $tree->{$tmp}->{right}
            }
            else{
                $tree->{$value} = undef;
                $tree->{$tmp}->{right} = $value;
                return
            }
        }
    }
}

sub LMR{
    my ($tree,$root) = @_;
    
    if (exists $tree->{$root}->{left}){
        LMR($tree,$tree->{$root}->{left})
    }
    print "$root ";
    if (exists $tree->{$root}->{right}){
        LMR($tree,$tree->{$root}->{right})
    }        
}

sub RML{
    my ($tree,$root) = @_;
    
    if (exists $tree->{$root}->{right}){
        RML($tree,$tree->{$root}->{right})
    }
    print "$root ";
    if (exists $tree->{$root}->{left}){
        RML($tree,$tree->{$root}->{left})
    }

}

perl 实现二叉树,二叉平衡树  #! /usr/bin/perl -wuse strict;use warnings;use Data::Dumper;my $head = undef;my $copy = /$head;foreach my $index( 1 .. 10 ){  &AVLTree_insert($copy, $index);}#&create_BSTree( $copy );#&create_tre 阅读详情

相关推荐

Perl 腾讯股票信息收集

之前的新浪股票脚本信息不太全,参考前面一篇文章腾讯股票接口,写了一个更加方便的,信息比较全的。看代码: use utf8; use Encode; use strict; use warnings; use LWP::UserAgent; use threads (exit => 'threads_only',); use threads::shared; use constant UR

USTBHacker的专栏 1万+

Perl implement Tree data structure (1)

用perl实现了Tree的数据结构,使用Class::Struct来实现,以下为代码: use Data::Dumper; use Class::Struct; struct Node =>{     left  => 'Node',     value => '$',     right => 'Node', }; $root = Node->new; add($r

USTBHacker的专栏 1070

Perl 新浪股票信息收集

通过解析SINA HTTP 返回的数据获取股票信息,具体返回值参考文章实时股票数据接口大全。 使用说明: perl script.pl [-c -f] -d 获取默认@defaultstock列表中股票信息,参数-c 清屏,参数-f 输出更加完整的信息,参考图例 perl script.pl -m [sh sz zx cy] 四个参数分别代表获取上海,深圳,中小,创业板股票的信息

USTBHacker的专栏 7612

Perl 闭包模拟类实现二叉树

在上一篇文章中用函数方式实现了一个二叉树,本篇用闭包模拟类的方式来重新实现,不同于传统意义的Perl 类,否则也不用去费力重新实现,本篇用闭包来模拟类的一些行为,以消息传递的方式调用方法。 功能同上一个版本的基本一样,是用闭包的好处: 1。 模拟类行为,开放类方法 2。 内部变量不可直接修改,只能通过方法调用获取或修改值 3。 消息类型多样,自己可以随便控制 特点: 1

USTBHacker的专栏 1754

Perl 判断一个字符串中所有字符是否在另外一个字符串中出现

在酷壳 – CoolShell.cn 中看到一个文章,判断一个字符串中的所有字符是否在另外一个字符串中出现,如果用循环的话时间复杂度是O(mxn),如果使用先排序后判断时间复杂度是O(mlgm)+O(nlgn)+O(m),作者面试的时候考官给出的一个思路是每个字符给一个素数,所有的树相乘,再用这个数去除另外一个字串中字符对应的数,余数为0的话则包含在第一个字串中,时间复杂度为O(m+n),思考了以

USTBHacker的专栏 5062

perl 编写的tree显示结构

use perl programming tool to struct tree

perl实现二叉树

最开始写的代码,每个结点用一个匿名哈希来表示,可惜运行时错误。。。代码如下 use strict ;use warnings ;sub create_tree { my $n8 = { 'left' =&gt; undef , 'right' =&gt; undef , 'value' =&gt; 8 , } ; my $n6 = ...

weixin_34414196的博客 226

深入解析达梦数据库核心技术:检查点、redo、undo、MVCC与内存缓存刷盘

MVCC 依赖 undo 日志:通过 undo 日志构建版本链,实现 “读不加锁”;刷盘依赖检查点:检查点批量清理脏页,redo 日志通过检查点释放空间;日志保障刷盘安全:redo 日志先行写入,确保未刷盘脏页可恢复;刷盘优化 MVCC 性能:优先刷冷区脏页,减少对高频访问数据的影响。例如,一个完整的 “查询 - 修改 - 提交 - 恢复” 流程中:查询时,MVCC 通过 undo 日志获取可见版本,无需等待锁;修改时,redo/undo 日志先记录,缓冲池生成脏页;

tangyuan12345678的博客 1415

【data structure】各种数据结构的c/c++实现

queue 队列的c/c++实现 stack 栈的c/c++实现 vector 数组的c++实现 list 链表的c++实现

离光曦的博客 1414

视频编解码——视频编解码器工作原理

目录什么是视频编解码器为什么需要视屏编解码器视频编码器与数字视频容器时评编码器的历史 什么是视频编解码器 简单来说就是用于压缩或解压数字视频的软件或硬件 编码是信息从一种形式或格式转换为另一种形式的过程,解码是编码的反向。 适用于视频 编码是将视频、音频的原始格式的文件通过压缩技术转换成另一种格式(视频如h.264,h.265,m-jpeg等)。 解码是编码的反向过程。应用中,一般是将h.264,h.265格式数据解码成如YUV格式裸流交给显示器显示。 为什么需要视屏编解码器 需要在有限的带宽或存储空间

路人coder 1万+

重塑计算的五层蛋糕:解读黄仁勋CES2026演讲背后的AI新秩序与物理世界

2026年CES演讲揭示AI新纪元:从语言模型到物理智能 NVIDIA CEO黄仁勋在2026年CES演讲中描绘了计算产业的根本性变革。核心突破包括: 计算范式转移:从指令执行转向意图理解,智能体系统崛起 物理AI突破:发布Cosmos世界模型,通过合成数据训练AI理解物理定律 全新VeraRubin计算平台:6芯片协同设计,解决摩尔定律放缓与AI需求增长的矛盾 自动驾驶革命:推出具备推理能力的Alpamayo模型,实现L4级自动驾驶 演讲标志着AI正从数字世界迈向物理世界,NVIDIA通过全栈布局,正在重

老孙 | Ethan Sun 的博客:AI 智能体与 AI 原生软件的工程实践 1273

使用Perl的HTML::TreeBuilder::XPath来解析网页内容

原文地址:http://www.php-oa.com/2009/09/24/perl-html-tree-builder-xpath.html转过来 慢慢研究强大的Perl中,有超级多强大的模块,让我们不在需要重复的发明轮子.下面这个就是一个强大的模块.HTML::TreeBuilder::XPath.它能象xml一样解析网站.怎么使用就不细讲了,如下,见实例,我是从alexa.com网站

天山古猿 2453

强化学习 | Multi Agents | Trust Region | HATRPO | HAPPO

ICLR2022多智能体论文,将trust region推广到MA上,保证单调递增。学习博客,共7k字,纯手敲。含大量手写笔记。

111辄的博客 1万+

Binary tree for perl

#!/usr/bin/perl -w # bintree - binary tree demo program use strict; my ( $root, $n ); # first generate 20 random inserts while ( $n++ < 20 ) { insert ( $roo...

weixin_33939843的博客 151

【项目实战】SOVD协议(面向服务的车辆诊断协议)

此外,AUTOSAR组织将SOVD部分内容的软件实现定义在了R22-11及以上版本的AUTOSAR Adaptive规范中,还支持动态发现车内诊断功能、获取高性能计算机(HPC)的Log信息等新的诊断需求,更符合当前软件定义汽车概念下的行业趋势。而SOVDGateway作为边缘节点,也肩负着对SOVD Client进行认证以及权限控制的责任,从而保证车辆的信息安全。相较于传统的UDS(Unified Diagnostic Services)协议,SOVD不仅保留了传统的读写数据、例程控制、故障读取等功能,

奶爸的编程之路,也就一周冷个三天 1904

Sigrity System Explorer Transient Analysis模式进行瞬态仿真分析操作指导-单端信号-并联端接

Sigrity System Explorer Transient Analysis模式可以用于瞬态仿真分析,通过搭建简易拓扑用于前仿真分析通道的时域性能,下面搭建一个简易的单端拓扑并且进行并联端接,以下图为例,准备好发送接收端的IBIS模型, (se_example.ibs,本例发送接收端都使用相同的IBIS模型),以及传输线的S参数模型(W1_welement_se.sp)最上方的图形界面是传输线的模型,本例是一个上下都有参考平面的带状线,右侧的梯形是蚀刻角度,根据W1和W2以及铜厚来确定。

weixin_54787054的博客 374

腾迅股票数据接口 http/javascript

之前使用了新浪的股票数据,由于新浪http/javascript缺少一些数据,用chrome自带的开发工具监视腾迅财经HTTP信息,得到以下获取股票数据的方法。 以五粮液为例,要获取最新行情,访问数据接口: http://qt.gtimg.cn/q=sz000858 返回数据: v_sz000858="51~五 粮 液~000858~27.78~27.60~27.70~41

USTBHacker的专栏 11万+

信号检测算法的MATLAB仿真:能量检测、循环平稳检测和匹配滤波检测

根据具体的应用场景和要求,选择合适的信号检测算法可以提高系统的性能和可靠性。在无线电通信中,信号检测是一项重要的任务,它用于检测和识别接收到的信号。在本文中,我们将介绍三种常用的信号检测算法:能量检测、循环平稳检测和匹配滤波检测,并提供相应的MATLAB源代码进行仿真实现。在上述代码中,我们首先设置了能量检测的阈值,然后生成了一个包含1000个服从正态分布的随机信号样本的信号。在上述代码中,我们首先设置了信号模板,然后生成了一个包含信号模板的信号样本。最后,通过比较相关性的最大值与阈值来判断信号是否存在。

PixelLancer的博客 1363

Perl lib path

Perl 中默认LIB路径有如下几个地方可以存储: Perl -V 中@INC变量,这是编译时绑定的系统环境变量PERL5LIB,如set PERL5LIB=D:/tmp 脚本中use lib 添加 所有的操作最后都是在系统变量@INC 中添加一个路径,按照先后顺序依次查找,默认的先后顺序是上边三类的倒序排列,看如下示例。 没有添加额外的路径的情况:(默认当前目录会添加到LIB

USTBHacker的专栏 6119

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Perl threads 摘要

最近又写了一个多线程的小工具,对一些多线程的使用有了进一步的心得。 Perl 创建线程有两种方式,正常通过threads->create 创建线程,用async  创建一个调用匿名过程的线程,具体参考perldoc threads。线程共享变量需要使用 threads::shared,共享变量只能存储scalar,共享变量的引用,如果存储List Hash的引用需使用shared_clo

USTBHacker的专栏 4647

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Perl 最简单配置文件

脚本中经常需要用到配置文件,一般来说可以用INI, XML来编辑配置文件,缺点是需要按照特定的格式配以特定的解析方法,需要额外引入其他的模块或者方法。用脚本语言Perl/Python来实现的话,最简单的方法就是用另外一个脚本来存储变量,使用的时候直接引入即可。优点是不需要额外的解析方法,而且配置灵活,可以用语言本身支持的数据结构来表示各种复杂的配置。 示例: config.pl %c

USTBHacker的专栏 3299

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Perl read INI file

工作中需要处理INI 配置文件,看了下同事写的脚本,处理的比较简单,只解析了需要的那部分,没有对其他部分做出处理,自己重新写了一个,可以把整个文件一次处理完毕,很简单,代码如下:   use warnings; use Data::Dumper; my $f = 'd:/project/SDI/params.config'; my (%dict,$this); open FIL

USTBHacker的专栏 2845

Perl Class::Struct

如果用perl来实现C的数据结构struct,请使用模块Class::Struct. 以下为一简单示例: -------------------------------------------------------------------- use Data::Dumper; use Class::Struct; use IO::File; struct Test =>{

USTBHacker的专栏 2824

Perl 前缀树实现

前缀树,用来处理大量字符串的查找、排序,也称为字典树,可以代替hash table。 http://en.wikipedia.org/wiki/Trie 以下翻译自Wikipedia: The following are the main advantages of tries over binary search trees (BSTs): Looking up keys

USTBHacker的专栏 2773
上一篇: Perl implement Tree data structure (1)
下一篇: Python transfer file through xmlrpc
Bai_Yuanyong
博客等级 码龄24年 46粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值