用Perl 的一般方式实现了一个完整的二叉搜索树,有如下功能:
1. 插入,删除,搜索
2. 最大,最小值
3. 某节点的前序节点,后序节点
整个过程中更改了好几次:
1. 增加了parent 属性,可以方便的找到父节点,有利于前序后序节点的查找。
2. 最初节点不是都有left right 属性,只有在有子节点的情况下才出现,后来为了统一所有节点都加上这些属性,没有子节点的情况下置为空undef。
3. 由于Perl 的限制,根节点用$root = { left => undef, right => undef, key => undef, parent => undef } 表示,如果使用$root = undef,则添加节点的时候会出错,所以只能使用一个引用来代替。
附代码:
#second version, advanced data structure with parent
use strict;
use warnings;
use Data::Dumper;
sub tree_empty {
my ($tree) = @_;
return !defined $tree->{key};
}
sub tree_insert {
my ( $tree, $value ) = @_;
if ( tree_empty($tree) ) {
$tree->{key} = $value;
}
elsif ( $value < $tree->{key} ) {
if ( $tree->{left} ) {
tree_insert( $tree->{left}, $value );
}
else {
$tree->{left} = {