Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 字符串数组中的有效二叉树_String_Algorithm_Tree_Prefix - Fatal编程技术网

String 字符串数组中的有效二叉树

String 字符串数组中的有效二叉树,string,algorithm,tree,prefix,String,Algorithm,Tree,Prefix,我有一个字符串数组。字符串中的每个字符只能是r或l。 我必须检查它是否有效 1. {rlr,l,r,lr, rl} * / \ l r \ / r l \ r A valid tree as all nodes are present. 2. {ll, r, rl, rr} *

我有一个字符串数组。字符串中的每个字符只能是r或l。 我必须检查它是否有效

1. {rlr,l,r,lr, rl}

           *
         /   \
       l       r
        \      /
          r  l
              \
                r
A valid tree as all nodes are present.




2. {ll, r, rl, rr}
         *
        /  \
        -   r
       /    /\
       l    l r

Invalid tree as there is no l node.
根据给定的输入,我必须确定它是否正在创建有效的树。 我提出了两个解决办法

1.使用trie存储输入,并在插入时将每个节点标记为有效或无效

2.根据长度对输入数组进行排序。 所以对于第一种情况,它将是{l,r,lr,rl,rlr}
我将创建一组字符串来放置所有输入。 如果一个字符串的长度大于1(对于RLR::R,RL),我将考虑从索引0和签入SET中的所有前缀。如果在集合中不存在任何前缀,那么我将返回false。
我想知道在上述方法中是否有更优化的解决方案或任何修改。

另一种可能的解决方案实际上是构建树(或trie)并维护一组尚未完成的节点。
如果完成对列表的迭代,但仍有不完整的节点,则该树无效。
如果集合为空,则树是有效的


例如,在您给出的第二棵树中,对于节点
ll
,您还将创建节点
l
,但您将其添加到不完整集。如果后面的一个节点是
l
,则您将从集合中删除它。如果没有,您将使用包含丢失节点的非空集结束迭代。

另一种可能的解决方案是实际构建树(或trie),并维护一组尚未完成的节点。
如果完成对列表的迭代,但仍有不完整的节点,则该树无效。
如果集合为空,则树是有效的

例如,在您给出的第二棵树中,对于节点
ll
,您还将创建节点
l
,但您将其添加到不完整集。如果后面的一个节点是
l
,则您将从集合中删除它。如果不是,您将使用包含缺少节点的非空集结束迭代