【发布时间】:2011-02-15 18:13:11
【问题描述】:
你们能帮我用算法来做这些事情吗?我已经实现了前序、中序和后序,并且我得到了使用这些顺序之一遍历树的提示。我正在使用 dotty 来标记(或“访问”)节点。
深度是从根到底部叶子的边数,所以每次移动时,深度加1?类似的东西?
不知道后代的算法。他们正在询问特定节点自身拥有的节点数。
顺便说一句,这些都是普通的树。
【问题讨论】:
你们能帮我用算法来做这些事情吗?我已经实现了前序、中序和后序,并且我得到了使用这些顺序之一遍历树的提示。我正在使用 dotty 来标记(或“访问”)节点。
深度是从根到底部叶子的边数,所以每次移动时,深度加1?类似的东西?
不知道后代的算法。他们正在询问特定节点自身拥有的节点数。
顺便说一句,这些都是普通的树。
【问题讨论】:
这是作业的问题吗?我的回答假设它是为了家庭作业。
树是一种递归数据结构,因此对它们进行操作的算法通常是递归的。递归算法需要一个基本案例和一个归纳案例。对于树,基本情况将是您访问叶节点(即没有子节点的节点)时所做的事情。当您访问内部节点(即具有至少一个子节点的节点)时,您将执行归纳案例。
用于计算深度(或树的“高度”):
用于计算后代数量:
我鼓励您提出澄清问题。
【讨论】:
depth(tree) = 1+ max(depth(tree.left), depth(tree.right));
descendants(tree) = descendants(tree.left) + descendants(tree.right);
对于任何一个,为空指针返回 0 将结束递归。
【讨论】:
descendants 将始终返回 0。