在MySQL中存儲(chǔ)三叉樹(shù)的方法有很多,本文介紹其中一種較為簡(jiǎn)單的方法。
首先,我們需要定義一個(gè)數(shù)據(jù)表來(lái)存儲(chǔ)三叉樹(shù)的節(jié)點(diǎn)信息。表的結(jié)構(gòu)如下:
CREATE TABLE `tree_node` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '節(jié)點(diǎn)ID', `value` varchar(255) NOT NULL COMMENT '節(jié)點(diǎn)值', `parent_id` int(11) unsigned DEFAULT NULL COMMENT '父節(jié)點(diǎn)ID', `left_child_id` int(11) unsigned DEFAULT NULL COMMENT '左子節(jié)點(diǎn)ID', `right_child_id` int(11) unsigned DEFAULT NULL COMMENT '右子節(jié)點(diǎn)ID', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='三叉樹(shù)節(jié)點(diǎn)信息表';
其中,id
為節(jié)點(diǎn)ID,value
表示節(jié)點(diǎn)的值,parent_id
是父節(jié)點(diǎn)的ID,left_child_id
和right_child_id
分別是左子節(jié)點(diǎn)和右子節(jié)點(diǎn)的ID。如果一個(gè)節(jié)點(diǎn)沒(méi)有父節(jié)點(diǎn)或子節(jié)點(diǎn),則對(duì)應(yīng)的ID為null
。
接下來(lái),我們可以通過(guò)遞歸方式將三叉樹(shù)存儲(chǔ)到tree_node
表中。例如,下面是一個(gè)三叉樹(shù):
A / | \ B C D / \ / \ E F G H
可以通過(guò)如下代碼將該三叉樹(shù)存儲(chǔ)到tree_node
表中:
-- 插入根節(jié)點(diǎn)A INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('A', NULL, 2, 3); -- 插入節(jié)點(diǎn)B INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('B', 1, 4, 5); -- 插入節(jié)點(diǎn)C INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('C', 1, NULL, NULL); -- 插入節(jié)點(diǎn)D INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('D', 1, 6, 7); -- 插入節(jié)點(diǎn)E INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('E', 2, NULL, NULL); -- 插入節(jié)點(diǎn)F INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('F', 2, NULL, NULL); -- 插入節(jié)點(diǎn)G INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('G', 3, NULL, NULL); -- 插入節(jié)點(diǎn)H INSERT INTO `tree_node` (`value`, `parent_id`, `left_child_id`, `right_child_id`) VALUES ('H', 3, NULL, NULL);
通過(guò)上面的代碼,我們成功地將三叉樹(shù)存儲(chǔ)到了tree_node
表中。
最后,我們可以通過(guò)SQL語(yǔ)句查詢?nèi)我夤?jié)點(diǎn)的子節(jié)點(diǎn)和父節(jié)點(diǎn)。例如,下面的代碼可以查詢節(jié)點(diǎn)B的左子節(jié)點(diǎn):
SELECT `value` FROM `tree_node` WHERE `id` = ( SELECT `left_child_id` FROM `tree_node` WHERE `id` = 2 );
使用以上方法,我們可以方便地在MySQL中存儲(chǔ)三叉樹(shù)。