【问题标题】:Printing tree by levels?按级别打印树?
【发布时间】:2023-03-29 12:49:01
【问题描述】:

阅读第一个建议的算法:https://www.geeksforgeeks.org/level-order-tree-traversal

/*Function to print level order traversal of tree*/
printLevelorder(tree)
for d = 1 to height(tree)
   printGivenLevel(tree, d);

/*Function to print all nodes at a given level*/
printGivenLevel(tree, level)
if tree is NULL then return;
if level is 1, then
    print(tree->data);
else if level greater than 1, then
    printGivenLevel(tree->left, level-1);
    printGivenLevel(tree->right, level-1);

他们提到在最坏的情况下时间复杂度是O(N^2),但为什么呢?

我们只扫描每个节点一次,这意味着复杂度总是 O(N)。

【问题讨论】:

    标签: c++ algorithm tree


    【解决方案1】:

    您扫描每个节点h(branch)-h(node) + 1 次。

    看这个例子:

       A
        \
         B
          \
           C
            \
             D
    

    在 printGivenLevel(tree, 1),您只扫描 A,然后完成。 在 printGivenLevel(tree, 2),你扫描 A 和 B,然后完成 在 printGivenLevel(tree, 3),您扫描 A、B 和 C,然后完成 在 printGivenLevel(tree, 4),你扫描 A、B、C 和 D,然后完成

    将这些加在一起得到sum of arithmetic progression,即O(n^2)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-02-04
      • 1970-01-01
      • 2014-07-27
      • 1970-01-01
      • 2022-01-16
      相关资源
      最近更新 更多