【发布时间】:2011-11-19 08:36:53
【问题描述】:
给定这个二叉树(实际上二叉树可以是随机的和动态的,这只是一个例子……):
二叉树图片见链接:binary tree example
这是给定的事实:
- 所有节点都连接到它们的父节点,这样我们就可以从下到上(当然也从上到下)遍历。
- 所有节点都保存关于它们左右部分有多少后代的信息。
问题是这样的:我需要找到一种方法来计算级别 2 中的节点总数(实际上,在任何级别,但现在,让我们专注于级别 2)。显然,如果我们事先知道二叉树的结构,答案是 3,但假设我们没有这张图片,只有给定的事实。
这里的另一个问题是我们将从第 2 级(我们的目标级别)中的节点而不是根节点开始。在本例中,我选择了 NODE F。
我知道使用广度优先顺序遍历是直接的解决方案,但我发现它太耗时了,因为每次我读取一个节点时,我都会从数据库中查询它。
我正在寻找更实用的方法。但是,如果由于给定数据不足而“不可能”解决这个问题,请告诉我应该提供哪些其他数据才能解决这个问题。如果可行,我会评估它。
顺便说一句,我正在创建一个网站,并使用 PHP 和 MySQL。但我只想要解决方案的概念或解释,更像是算法而不是编程sn-p或代码......
希望有人能回答我...非常感谢!
【问题讨论】:
-
树是存储在数组中的吗?
-
不,先生,我只有一个表来存储每个节点的信息,比如谁是左儿子、右儿子、父亲等。但最好是,我会为此使用链接列表,因为二叉树可以延伸到任何深度并且是动态的。
-
你能把一些测试数据放在网上的某个地方,以便我们进行基准测试吗?只有 {id,pa,le,ri} 节点,不需要有效负载。
标签: php mysql algorithm binary-tree tree-traversal