CREATE TABLE `tp_user` (
`id` bigint(20) UNSIGNED NOT NULL,
`parent_id` bigint(20) UNSIGNED DEFAULT NULL,
`name` varchar(100) COLLATE utf8mb4_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `tp_user` (`id`, `parent_id`, `name`) VALUES
(1, null, 'alpha1'),
(2, 1, 'alpha2'),
(3, 1, 'alpha3'),
(4, 1, 'alpha4'),
(5, 2, 'alpha5'),
(6, null, 'alpha6'),
(7, 3, 'alpha7'),
(8, 3, 'alpha8'),
(9, 5, 'alpha9'),
(10, 5, 'alpha10'),
(11, 8, 'alpha11');
ALTER TABLE `tp_user`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `id` (`id`);
假设给定 id 为 1(值也可能是3或8),求深度?
给我一个数据库特性无关的算法伪代码或思路
其实你要求的是给定节点的高度(节点到叶子的最长距离)。这种问题一般考虑用recursive with,比如Postgresql:
values(0, 3, null::int)
这一行中的3
是指定的节点,可以替换成其它节点。