当前位置: 首页 > 网络应用技术

[问题的日记]验证二进制树的前奏序列

时间:2023-03-07 21:20:34 网络应用技术

  该问题日记的第51章,扣除额的标题为:验证二进制树的前奏序列化,媒介

  这是二进制树的另一个问题。二进制树的问题是什么,它比多fork树更简单?实际上,它们以相同的方式解决

  主题的要求相对清楚,即字符串,字符串包含数字,逗号,井,指示二进制树节点,字符间隔和空节点

  然后,我们以某种方式检查,给定的串是二进制树前奏的结果。

  看到这一要求实际上可能会在嘴角微笑。让我们简单地以横穿前奏的方式将弦恢复到二进制树中吗?

  但是标题强调一点,我们不能重建树,所以我们只能找到另一个法律

  想一想,我们的注意力可以转移到字符串中的某些字符的数量上,让我们看一下下图

  对于二进制树,节点可能具有2个子节点,或者可能是子节点。然后根据标题中的含义,可能是字符串中的两个数字,例如2,3 2,3

  或一个空节点#和1个数字,例如#,3或3,#

  继续添加2个节点

  在这里,我们不能直接将上一层中要补充的节点的数量与在此层上补充的节点的数量混淆。它需要分开。

  从这个角度来看,我们要注意的是将字符放在给定的字符串中。我们从头开始旅行,并记录了需要根据上述逻辑添加的字符。

  我们可以使用堆栈来处理并继续穿越。如果我们遇到#编号#,我们将最大程度地减少要补充的节点的数量(在堆栈顶部的数字)。如果是数字提取1,然后继续在堆栈中添加2个节点

  根据上述逻辑和分析,我们可以转化为以下代码

  重要的是要注意,当我们初始化节点时,我们将默认情况下给出1个节点,因为我们需要放置根节点,根节点只有1个

  编码如下:

  时间复杂性非常明显。我们一遍又一遍地旅行的字符串,因此时间复杂性为O(n),并且空间复杂性也为O(n),因为我们打开了堆栈空间。这个空间涉及每一二个二进制树的每个二进制树。

  原始地址:331。验证二进制树的前奏序列

  今天在这里。如果有偏差,请询问斧头

  朋友,您的支持和鼓励是我坚持的动力

  好吧,这次在这里

  技术是开放的,我们的心态应该是开放的。改变太阳的变化,并努力向前迈进。

  我有点魔鬼,尼兹(Nezha),欢迎喜欢这个系列,下次再见?

  原始:https://juejin.cn/post/7103925252525053471