1

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

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

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

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

4

2 回答 2

5

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

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

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

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

用于计算后代计数:

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

我鼓励你提出澄清问题。

于 2010-05-05T03:52:57.723 回答
1
depth(tree) = 1+ max(depth(tree.left), depth(tree.right));

descendants(tree) = descendants(tree.left) + descendants(tree.right);

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

于 2010-05-05T03:42:14.543 回答