我正在做一个从预订和顺序遍历(每个节点中的一个字符串)构建二叉树的任务,并试图围绕如何构建实际的树包裹我的大脑.
以下是关于如何实现此目标的思考过程:
我已经完成了步骤1-4,但是我不太确定如何正确构建我的树,并且想知道是否有人有任何指针.谢谢.
在构建新树之前执行递归.所以,你的列表看起来像这样:
非递归部分可以在O(n)中完成,并且对于每个递归级别对它们求和也是每个O(n).因此总运行时间取决于递归级别的数量.如果你有一个近似平衡的树,深度是O(log n),因此我们得到O(n·log n).由于唯一缓慢的部分是在inorder数组中搜索根节点,我想如果我们对树有更多的了解,我们可以优化它.
在最坏的情况下,我们在树中的每个节点都有一个递归级别,达到复杂度O(n·n).
示例:预购ABCDEF,Inorder FEDCBA,树:
+---+
| A |
++--+
|
+---+ |
| B +<--+
++--+
|
+---+ |
| C +<--+
++--+
|
+---+ |
| D +<--+
++--+
|
+---+ |
| E +<--+
++--+
|
+---+ |
| F +<--+
+---+
Run Code Online (Sandbox Code Playgroud)