【问题标题】:insert node in ternary tree在三叉树中插入节点
【发布时间】:2020-09-29 13:57:39
【问题描述】:

我有一棵三叉树,

我已经创建了一个表

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 查询在图像中按给定顺序插入节点

【问题讨论】:

  • 你在哪里有数据。在文件中还是需要手动创建?
  • 我也想知道这些数据的格式 :) 您可以将树从顶部节点映射到底部分支,然后将它们插入到数据库中
  • 当我插入一个新节点时,它应该自动插入到给定图像中的提及位置
  • 你是如何插入的?是手动的,还是有任何自动化流程?
  • 什么是next_pool 列?

标签: mysql sql ternary-tree


【解决方案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,它将是它的第二个子节点。

【讨论】:

  • 谢谢你的解释很好,我只想知道,是否可以使用你的算法将树扩展到第 n 级。
  • @GagandeepSingh 是否可以使用您的算法将以上树扩展到第 n 级 此方法没有级别限制,可以轻松扩展..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-30
相关资源
最近更新 更多