没有对问题更具体的定义,很难提供好的帮助。但是,如果您可以计算左侧条目,那么听起来您已经完成了一半。
与其计算左侧条目,不如尝试计算两边。这个伪代码看起来像这样:
public static int leafCount(Node node) {
if (node == null) {
return 0;
}
return 1 + leafCount(node.left) + leafCount(node.right);
}
如果您使用的任何后端语言都有用于树结构的库,我希望已经提供了类似的功能。
编辑:
在揭示我们确实有一个树形表结构后,可以用 SQL 查询 -
表:
CREATE TABLE RECURSE (ID INT NOT NULL WITH DEFAULT,
R_SIDE INT NOT NULL WITH DEFAULT,
L_SIDE INT NOT NULL WITH DEFAULT)
数据:
INSERT INTO RECURSE VALUES (1, 2, 5)
(2, 3, 4)
(3, 0, 0)
(4, 0, 0)
(5, 0, 0)
结果设置:
Id R_Side L_Side
1 2 5
2 3 4
3 0 0
4 0 0
5 0 0
此语句将返回左右节点的计数。至少在 DB2 下,似乎有一些限制使得 left joins 难以在递归 CTE 中使用,因此您必须分别计算左侧和右侧。如果它不能完全满足您的需求,请将此作为起点。
WITH left_side (id, count) as (SELECT id, 0
FROM recurse
WHERE L_Side = 0
UNION ALL
SELECT a.id, 1 + b.count
FROM recurse as a
JOIN left_side as b
ON b.id = a.l_side
where a.l_side > 0),
right_side (id, count) as (SELECT id, 0
FROM recurse
WHERE R_Side = 0
UNION ALL
SELECT a.id, 1 + b.count
FROM recurse as a
JOIN right_side as b
ON b.id = a.R_Side
where a.l_side > 0)
SELECT a.id, COALESCE(b.count, 0) + COALESCE(c.count, 0) as LeafCount
FROM recurse as a
LEFT JOIN right_side as b
ON b.id = a.id
LEFT JOIN left_side as c
ON clid = a.id
产量:
Id LeafCount
1 3
2 2
3 0
4 0
5 0