Two methods to implement tree structure_PHP tutorial
Jul 21, 2016 pm 04:08 PM
Two ways to implement a tree structure
1. Recursive method
Recursion means explicitly calling itself in a function.
Using the recursive method to realize the tree structure is characterized by faster data writing speed and slower display speed (especially obvious when the tree has many branches/levels). It is suitable for situations where the amount of written data is large and the tree structure is complex.
Data structure (take mysql as an example)
Code:---------------------------------- --------------------------------------------------
CREATE TABLE `tree1` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL default '0',
`topic` varchar(50 ) default NULL,
PRIMARY KEY (`id`),
KEY `parentid` (`parentid`)
) TYPE=MyISAM;
INSERT INTO `tree1` (`id` , `parentid`, `topic`) VALUES
(1,0,'Tree 1'),
(2,0,'Tree 2'),
(3,0,'Tree 3' ),
(4,2,'Tree 2-1'),
(5,4,'Tree 2-1-1'),
(6,2,'Tree 2-2' ),
(7,1,'Tree 1-1'),
(8,1,'Tree 1-2'),
(9,1,'Tree 1-3'),
(10,8,'Tree 1-2-1'),
(11,7,'Tree 1-1-1'),
(12,11,'Tree 1-1- 1-1');
----------------------------------------- ---------------------------------------------
Field description
id, the id number of the record
parentid, the parent record id of the record (if it is 0, it is the root record)
topic, the display title of the record
Display program
Sequence tree:
PHP code:----------------------------------------- ------------------------------------------
< ?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');
/* Recursive function displayed in tree format*/
function tree($ parentid = 0) {
/*Execute sql query to get the title and id of the record*/
$sql = "select topic,id from tree1 where parentid = $parentid order by id asc";
$ rs = mysql_query($sql);
/* Indent*/
echo("<ul>");
while($ra = mysql_fetch_row($rs)) {
/* Display record title*/
echo('<li>'.$ra[0].'</li>');
/* Recursive call*/
tree($ra[1 ]);
}
echo("</ul>");
}
tree();
?>
------ -------------------------------------------------- --------------------------
Reverse tree:
PHP code:----- -------------------------------------------------- ------------------------
<?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');
/* Recursive function for tree display*/
function tree($parentid = 0) {
/*Execute sql query to obtain the record Title and id*/
$sql = "select topic,id from tree1 where parentid = $parentid order by id desc";
$rs = mysql_query($sql);
/* Indent*/
echo("<ul>");
while($ra = mysql_fetch_row($rs)) {
/* Display record title*/
echo('<li>'. $ra[0].'</li>');
/* Recursive call*/
. ;");
}
tree();
?>
----------------------- -------------------------------------------------- -------
Insert data program
PHP code:---------------------- -------------------------------------------------- --------
<?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');
$sql = " insert into tree (topic,parentid) values('tree 3-1',3);";
mysql_query($sql);
?>
------ -------------------------------------------------- -----------------------
2. Sorting field method
This method is implemented by adding a field to the data structure that marks the sequential position of the record in the entire tree. It is characterized by high display speed and efficiency. However, when the structure of a single tree is complex, data writing efficiency is insufficient. Moreover, when arranging in order, the algorithm for inserting and deleting records is too complex, so reverse order is usually used.
Data structure (take mysql as an example)
Code: ---------------------------- -------------------------------------------------- --
CREATE TABLE `tree2` (
`id` tinyint(3) unsigned NOT NULL auto_increment,
`parentid` tinyint(3) unsigned NOT NULL default '0',
`rootid` tinyint(3) unsigned NOT NULL default '0',
`layer` tinyint(3) unsigned NOT NULL default '0',
`orders` tinyint(3) unsigned NOT NULL default '0',
`topic` varchar(50) default NULL,
PRIMARY KEY (`id`),
KEY `parentid` (`parentid`),
KEY `rootid` (`rootid`)
) TYPE=MyISAM
INSERT INTO `tree2` (`id`, `parentid`, `rootid`, `layer`, `orders`, `topic`) VALUES
(1,0,1 ,0,0,'Tree 1'),
(2,0,2,0,0,'Tree 2'),
(3,0,3,0,0,'Tree 3') ,
(4,2,2,1,2,'Tree 2-1'),
(5,4,2,2,3,'Tree 2-1-1'),
(6,2,2,1,1,'Tree 2-2'),
(7,1,1,1,4,'Tree 1-1'),
(8,1,1 ,1,2,'Tree 1-2'),
(9,1,1,1,1,'Tree 1-3'),
(10,8,1,2,3,' tree 1-2-1'),
(11,7,1,2,5,'tree 1-1-1'),
(12,11,1,3,6,'tree 1 -1-1-1');
----------------------------------------- ------------------------------------------
Display program
PHP code:----------------------------------------- ------------------------------------------
< ?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');
/* Select all root record ids */
$sql = " select id from tree2 where parentid = 0 order by id desc";
$rs = mysql_query($sql);
echo("<ul>");
$lay = 0;
while($ra = mysql_fetch_row($rs)) {
echo("<ul>");
/* Select all records in this tree and sort by orders field*/
$sql = "select topic,layer from tree2 where rootid = $ra[0] order by orders";
$rs1 = mysql_query($sql);
while($ra1 = mysql_fetch_row($rs1)) {
/* Encement display*/
if ($ ra1 [1] & gt; $ lay) {
echo (str_repeat ("& lt; ul & gt;", $ ra1 [1]-$ lay);
}elseif($ra1[1]<$lay) {
echo(str_repeat("</ul>",$lay-$ra1[1]));
Record display*/
//echo("$ra1[1]>$lay");
//echo("$ra1[1]>$lay"); $lay = $ra1[1];
}
echo("</ul>");
}
echo("</ul>");
?> ;
---------------------------------------------- ---------------------------------------
Insert data program
PHP code:--------------------------------------------- -------------------------------------
<?
/* Database connection*/
mysql_connect();
mysql_select_db('tree');
/* Insert root record*/
$sql = "insert into tree2 (topic) values ('tree5')";
mysql_query($sql);
$sql = "update tree2 set rootid = id where id = ".mysql_insert_id();
mysql_query($sql);
/* Insert child record*/
$parentid = 5;//Parent record id
/* Remove root record id, parent record indentation level, parent record sequence position*/
$ sql = "select rootid,layer,orders from tree2 where id = $parentid";
list($rootid,$layer,$orders) = mysql_fetch_row(mysql_query($sql));
/* Update insertion position The orders value of the last record*/
$sql = "update tree2 set orders = orders + 1 where orders > $orders";
mysql_query($sql);
/* Insert record*/
$sql = "insert into tree2 (rootid,parentid,orders,layer,topic) values ($rootid,$parentid,".($orders+1).",".($layer+1).",' Tree 2-1-1-2')";
mysql_query($sql);?>
http://www.bkjia.com/PHPjc/314792.html

Hot Article

Hot tools Tags

Hot Article

Hot Article Tags

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

How to recover deleted contacts on WeChat (simple tutorial tells you how to recover deleted contacts)

The secret of hatching mobile dragon eggs is revealed (step by step to teach you how to successfully hatch mobile dragon eggs)

How to set font size on mobile phone (easily adjust font size on mobile phone)

How to choose a mobile phone screen protector to protect your mobile phone screen (several key points and tips for purchasing mobile phone screen protectors)

Detailed explanation of C++ function recursion: application of recursion in string processing

A beginner's guide to C++ recursion: Building foundations and developing intuition

Complete collection of excel function formulas

C++ Recursion Advanced: Understanding Tail Recursion Optimization and Its Application
