加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Perl implement Tree data structure (2)

发布时间:2020-12-15 20:50:57 所属栏目:大数据 来源:网络整理
导读:之前用struct实现的Tree不够灵活,重新使用hash来实现,更加灵活而且可以更改节点,进而实现平衡二叉树。 以下为程序代码: use Data::Dumper; my $tree = {}; add($tree,$_) for (5,7,1,4,9,6,100,20,30,21,60); print Dumper $tree; LMR($tree,$tree-{root

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

以下为程序代码:

use Data::Dumper;

my $tree = {};

add($tree,$_) for (5,7,1,4,9,6,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})
??? }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读