【问题标题】:how can get a tree with only one tree traversal?怎样才能得到一棵只有一次树遍历的树?
【发布时间】:2013-01-28 07:03:59
【问题描述】:

考虑我想以序列化的方式传输一棵二叉树,我只有一个字符串来传递该树,我只能使用一次遍历的帮助,有什么办法可以做到吗? - (在 Ebay 上被问到)..

换句话说,可以只使用一个树遍历字符串来生成二叉树吗?面试官还给了我一个提示,说我可以在没有叶子的地方使用 null ..

【问题讨论】:

  • 我不太明白这个问题。您想将二叉树对象转换为字符串吗?
  • 我不确定我是否理解这个问题......只需遍历树,可能是深度优先,然后序列化内容。然后在另一端重建树。
  • 预购。 使用数组索引存储它。因此可以在接收端轻松解码。
  • 你不能从它的前序遍历中唯一地解码一棵树。 “a b c”代表什么树?
  • 字符串应该使用数组索引来创建。

标签: java data-structures tree binary-tree tree-traversal


【解决方案1】:

[编辑] 鉴于这似乎是一些给定的任务,而不是真正的现实问题,答案没有意义。第二次尝试:

看到你可以使用空值,你确实可以使用带有空值的preorder。

a b null null c null null 将是一棵看起来像 (a (b) (c)) 的树,而 (a (b (c)) ) 将被编码为 a b c null null null null(请注意,我给每个叶子两个 null 孩子,也许没有它也可以工作)

【讨论】:

  • 看,我可以通过使用空叶子来完成树。一棵完整的树不应该只使用一次遍历进行编码。
【解决方案2】:

http://www.seas.gwu.edu/~csci133/fall05/trees-fig4.jpg

请考虑上图中的树,如果我们想只使用 1 次遍历传递一个字符串,我们可以在该特定位置没有子节点时放置特殊符号。

现在如果我们通过 1 2 4 7 $ $ $ 5 $ $ 3 $ 6 8 $ $ 9 $ $

                                        1
                                     /      \
                                   2        3
                                  /  \     / \
                                 4    5   $   6
                                / \  / \     / \
                               7   $ $  $    8   9
                              / \           /\  /\
                             $  $          $ $ $ $

这里 $ 表示子元素为空,因此移动到订单的下一个位置。

如果我错了,请纠正我,以上是不可能的......

【讨论】:

    【解决方案3】:

    如果您想用字符串、字节[] 或流表示任何对象,您可以查看 JSON 序列化或 XML 序列化。

    【讨论】:

      猜你喜欢
      • 2011-04-26
      • 2020-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-19
      • 2021-07-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多