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

[Perl 6] Search Binary-Tree node

发布时间:2020-12-15 21:43:59 所属栏目:大数据 来源:网络整理
导读:About binarytree depth first search Code 假设有一二叉树,给出AB两个点,求AB的最短路径。 代码只是一个演示,可以寻找到达两个节点的路径 role BinaryTree[::Type] { has Type $.node; has BinaryTree[Type] $.lchild; has BinaryTree[Type] $.rchild; m

About

  • binarytree

  • depth first search

Code

假设有一二叉树,给出AB两个点,求AB的最短路径。
代码只是一个演示,可以寻找到达两个节点的路径

role BinaryTree[::Type] {
has Type $.node;
has BinaryTree[Type] $.lchild;
has BinaryTree[Type] $.rchild;

method create(::?CLASS::U: *@list) {
    my $middle      = @list.elems div 2;
    my @lchilds     = @list[0 .. $middle - 1];
    my $midchild    = @list[$middle];
    my @rchilds     = @list[$middle + 1 .. * - 1];

    self.bless(
        node    => $midchild,lchild  => @lchilds ?? self.create(@lchilds) !! $?CLASS,rchild  => @rchilds ?? self.create(@rchilds) !! $?CLASS,);
}

method preorder(&callback) {
    callback $!node;
    for $!rchild,$!lchild -> $child {
        $child.preorder(&callback) if $child.defined;
    }
}

}

`(

4
3       2
1 6     5 8

)
my $tree = BinaryTree[Int].create(1,3,6,4,5,2,8);
my $a = 5; # 要寻找的a的值
my $b = 8; # 要寻找的b的值
my $ab; # 是否找到a
my $bb; # 是否找到b
my @adistance; # 路径记录
my @bdistance; # 路径记录
my $print = -> array { for array { print " " ~ .node; }; say ""; };

sub dinstance-search($tree){
return if ?$ab && ?$bb;
if $tree.rchild.defined {
@adistance.push: $tree unless ?$ab;
@bdistance.push: $tree unless ?$bb;
dinstance-search($tree.rchild);
}
if $tree.lchild.defined {
@adistance.push: $tree unless ?$ab;
@bdistance.push: $tree unless ?$bb;
dinstance-search($tree.lchild);
}
{

say "access tree node: " ~ $tree.node;

    #$print(@adistance);
    if !?$ab {
        if $a eq $tree.node {
            $ab = True;
            return;
        }
        @adistance.pop;
    }
    if !?$bb {
        if $b eq $tree.node {
            $bb = True;
            return;
        }
        @bdistance.pop;
    }
}

}

dinstance-search($tree);

say "a ---> ";
$print(@adistance);

say "b ---> ";
$print(@bdistance);

(编辑:李大同)

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

    推荐文章
      热点阅读