0

我有一棵三叉树,三叉树

我创建了一个表

CREATE TABLE `user_tree` 
( `ID` int(11) NOT NULL AUTO_INCREMENT, 
`name` varchar(100) NOT NULL,
`parent_ID` int(11) NOT NULL,  
`next_pool` tinyint(1) NOT NULL DEFAULT '0', 
`last_update` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6), 
 PRIMARY KEY (`ID`)) ENGINE=MyISAM AUTO_INCREMENT=23 DEFAULT CHARSET=latin1

如何使用mysql查询在图像中以给定顺序插入节点

4

1 回答 1

1

您必须使用以下规则集:

步骤 1:选择具有空套接字的最小级别数;

第 2 步:为此级别选择每个节点数量的最大空套接字;

第 3 步:为具有上述级别和空套接字数量的节点选择最小 id。


让我们找出节点#30 必须连接到的位置。

第1步。

每个级别的节点数量可以很容易地计算出来:1st level 包含 1 个节点,2nd - 3 个节点,3rd - 9 个节点,... Nth - 3^(N-1) 个节点。所以你可以很容易地计算出这个节点号插入的节点的级别(例如,如果一个节点是第 30 个节点,那么 - 1 个节点代表级别 1,1+3=4 代表级别 1+2、1+3+9 = 1+2+3 层为 13 个节点,1+3+9+27=1+2+3+4 层为 40 个节点,即节点将在第 4 层拥有)。

第2步。

如上计算,前 13 个节点占据第 1-3 层,因此第 30 个节点将是第 17 个节点插入第 4 层。该层包含 9 个父节点,因此第 17 个节点将是其父节点的第 2 个(roundUp(17/9))。它的父级在其第 3 级(17 MOD 9)中排名第 6。

步骤 3。

关于父级(1 和 2)的级别包含 1+3=4 个节点。所以第 3 层的第 6 个节点是 1+3+6=10th 节点。

完全 - 节点 30 必须连接到节点 10,它将是它的第二个子节点。

于 2020-06-10T08:52:45.910 回答