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