用perl实现了Tree的数据结构,使用Class::Struct来实现,以下为代码:
use Data::Dumper;
use Class::Struct;
struct Node =>{
left => 'Node',
value => '$',
right => 'Node',
};
$root = Node->new;
add($root,$_) for (5,7,1,4,9,6,0,9,100,20,30,21,60);
#print Dumper $root;
print LMR($root),"/n";
print RML($root),"/n";
print MLR($root),"/n";
sub add{
my ($root,$value) = @_;
if (! defined $root->value){
$root->value($value);
return;
}
my $tmp = $root;
while($tmp){
if ($value < $tmp->value){
if (defined $tmp->left){
$tmp = $tmp->left
}
else{
$tmp->left(Node->new(value => $value));
return
}
}
elsif ($value > $tmp->value){
if (defined $tmp->right){
$tmp = $tmp->right
}
else{
$tmp->right(Node->new(value => $value));
return
}
}
else{
return
}
}
}
#左序遍历
sub LMR{
my $tmp = shift;
if (defined $tmp->left){
LMR($tmp->left)
}
print $tmp->value;
if (defined $tmp->right){
LMR($tmp->right)
}
}
#右序遍历
sub RML{
my $tmp = shift;
if (defined $tmp->right){
RML($tmp->right)
}
print $tmp->value;
if (defined $tmp->left){
RML($tmp->left)
}
}
#中序遍历
sub MLR{
my $tmp = shift;
print $tmp->value;
if (defined $tmp->left){
MLR($tmp->left)
}
if (defined $tmp->right){
MLR($tmp->right)
}
}
问题:
树节点无法更改,无法改为平衡二叉树,也许是struct的问题,暂时还没有找到解决方法。
Perl implement Tree data structure (1)
最新推荐文章于 2020-06-12 13:39:37 发布
这篇博客展示了如何使用Perl的Class::Struct模块创建Tree数据结构,并提供了添加节点及三种遍历方法(左序、右序、中序)。然而,作者遇到了节点不可修改的问题,这可能限制了将其转化为平衡二叉树的能力。

1252

被折叠的 条评论
为什么被折叠?



