来自字符串数组的有效二叉树

Posted

技术标签:

【中文标题】来自字符串数组的有效二叉树【英文标题】:Valid binary tree from array of string 【发布时间】:2016-10-01 06:43:06 【问题描述】:

我有一个字符串数组。字符串中的每个字符只能是 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 中的所有前缀并检查集合。如果集合中不存在任何前缀,那么我将返回 false。 我想知道上述方法是否有更优化的解决方案或任何修改。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于来自字符串数组的有效二叉树的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode1736. 替换隐藏数字得到的最晚时间/1743. 从相邻元素对还原数组/671. 二叉树中第二小的节点

文本左右对齐(字符串模拟)螺旋矩阵 II(数组矩阵)二叉树中的最大路径和(树深度优先搜索)

数据结构--数组存储二叉树(Java)

leetcode记录

LeetCode 0655. 输出二叉树

LeetCode面试题 17.10. 主要元素/最优二叉树II(树形DP)/NC73数组中出现次数超过一半的数字/229. 求众数 II/NC134股票(无限次交易)/NC114旋转字符串