【问题标题】:Calculating depth and descendants of tree计算树的深度和后代
【发布时间】:2011-02-15 18:13:11
【问题描述】:

你们能帮我用算法来做这些事情吗?我已经实现了前序、中序和后序,并且我得到了使用这些顺序之一遍历树的提示。我正在使用 dotty 来标记(或“访问”)节点。

深度是从根到底部叶子的边数,所以每次移动时,深度加1?类似的东西?

不知道后代的算法。他们正在询问特定节点自身拥有的节点数。

顺便说一句,这些都是普通的树。

【问题讨论】:

    标签: c++ tree depth


    【解决方案1】:

    这是作业的问题吗?我的回答假设它是为了家庭作业。

    树是一种递归数据结构,因此对它们进行操作的算法通常是递归的。递归算法需要一个基本案例和一个归纳案例。对于树,基本情况将是您访问叶节点(即没有子节点的节点)时所做的事情。当您访问内部节点(即具有至少一个子节点的节点)时,您将执行归纳案例。

    用于计算深度(或树的“高度”):

    • 基本情况:没有子节点的节点的深度是多少?
    • 归纳案例:假设您拥有所有孩子的深度(可能不同),那么您正在访问的当前节点的深度是多少?

    用于计算后代数量:

    • 基本情况:没有子节点的节点有多少个后代?
    • 归纳案例:假设您知道所有孩子的后代数量,那么您正在访问的当前节点的后代数量是多少?

    我鼓励您提出澄清问题。

    【讨论】:

      【解决方案2】:
      depth(tree) = 1+ max(depth(tree.left), depth(tree.right));
      
      descendants(tree) = descendants(tree.left) + descendants(tree.right);
      

      对于任何一个,为空指针返回 0 将结束递归。

      【讨论】:

      • descendants 将始终返回 0。
      • @Potatoswatter:是的,因为看起来像作业,所以我特意留下一些东西让他自己解决......
      猜你喜欢
      • 1970-01-01
      • 2022-01-25
      • 2010-12-24
      • 1970-01-01
      • 2013-02-19
      • 1970-01-01
      • 1970-01-01
      • 2016-09-13
      • 2012-11-23
      相关资源
      最近更新 更多