菜单
很久没用php了,为了加深数据结构的基本知识(为考试准备),练习一下基本的算法,当然还是为了以后使用php做菜单的时候免得麻烦。
算法:数据结构中的最基本的树与二叉树的转换
大家凑合着看吧!因为只是为了熟悉一下算法,没有做具体的测试,同时对数据库的操作没有封装成类,大家如果需要可以自行修改或者和我联系!
your data must save like this:
id,topic,child_l,parent,child_r,content
file name:
show.inc.php
codes:
==================================================
class shows{
var $items;
var $the_stack;
var $count=0;
function find($l_value) {
for($j=1;$jitems[info_all];$j++) {
if($l_value==$this->items[d_id][$j]])
{ return($j);exit; }
}
}
function m_l_r_list($i) {
if(($this->items[f_node][$i]]==0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]!=-1))
{//if it is root node!!!
echo
;
echo ;
echo pages_0($this->items[d_id][$i]]).?d_id=.$this->items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
echo items[d_id][$i]]. target=\rightframe\>add;
echo
;
echo ;
$i=$this->find($this->items[l_node][$i]]);
$this->count=$this->count+2;
$this->m_l_r_list($i);
exit;
}
if(($this->items[f_node][$i]]==0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]==-1))
{
exit;
}
if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]!=0)&&($this->items[l_node][$i]]!=0))
{//if node have left and right child
$current_node=$this->items[d_id][$i]];
if(($this->items[l_node][$i]]==-1)&&($this->items[r_node][$i]]==-1)) {
$i=$this->find($this->items[f_node][$i]]);
if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
$this->items[r_node][$i]]=-1;
}
if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
$this->items[l_node][$i]]=-1;
}
$this->count=$this->count-2;
$this->m_l_r_list($i);
}//if left child and right child have been visited up to his parent node
if(($this->items[l_node][$i]]!=-1)&&($this->items[r_node][$i]]!=-1)) {
echo ;
for ($k=0;$kcount;$k++) { echo ;}
echo ;
echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
//echo $this->items[node_value][$i]];
echo items[d_id][$i]]. target=\rightframe\>add;
echo items[d_id][$i]].>del;
echo
;
echo ;
$i=$this->find($this->items[l_node][$i]]);//visite left child node
$this->count=$this->count+2;
$this->m_l_r_list($i);
}//if left child node and right child node have not been visited
if(($this->items[l_node][$i]]==-1)&&($this->items[r_node][$i]]!=-1)) {
$i=$this->find($this->items[r_node][$i]]);//visite right child node
$this->m_l_r_list($i);
}//if left child node have been visited and right child node have not been visited
}
if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]==0)&&($this->items[l_node][$i]]!=0))
{//if node only have left child
$current_node=$this->items[d_id][$i]];
if($this->items[l_node][$i]]!=-1) {
echo ;
for ($k=0;$kcount;$k++) { echo ;}
echo ;
echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
//echo $this->items[node_value][$i]];
echo items[d_id][$i]]. target=\rightframe\>add;
echo items[d_id][$i]].>del;
echo
;
echo ;
$i=$this->find($this->items[l_node][$i]]);//visite left child node
$this->count=$this->count+2;
$this->m_l_r_list($i);
exit;
}//if his left child node have not been visited
if($this->items[l_node][$i]]==-1) {
echo
;
$i=$this->find($this->items[f_node][$i]]);
if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
$this->items[r_node][$i]]=-1;
}
if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
$this->items[l_node][$i]]=-1;
$this->count=$this->count-2;
}
$this->m_l_r_list($i);
exit;
}//if his left child node have been visite,up to his parent node
}
if(($this->items[f_node][$i]]!=0)&&($this->items[r_node][$i]]!=0)&&($this->items[l_node][$i]]==0))
{//if node only have right child
$current_node=$this->items[d_id][$i]];
$j=$this->find($this->items[f_node][$i]]);
if($this->items[r_node][$i]]!=-1) {
echo ;
for ($k=0;$kcount;$k++) { echo ;}
echo items[d_id][$i]].\ target=\rightframe\>.$this->items[node_value][$i]].;
//echo $this->items[node_value][$i]];
echo items[d_id][$i]]. target=\rightframe\>add;
echo items[d_id][$i]].>del;
echo
;
$i=$this->find($this->items[r_node][$i]]);//visite right child node
$this->m_l_r_list($i);
exit;
}//if his right child node have not been visited
if($this->items[r_node][$i]]==-1) {
$i=$this->find($this->items[f_node][$i]]);
if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
$this->items[r_node][$i]]=-1;
}
if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
$this->items[l_node][$i]]=-1;
$this->count=$this->count-2;
}
$this->m_l_r_list($i);
exit;
}//if his right child node have been visite,up to his parent node
}
if(($this->items[f_node][$i]]!=0)&&($this->items[l_node][$i]]==0)&&($this->items[r_node][$i]]==0))
{//if this node haven't child node,print it and up to his parent
//node his parent left or right child have been visited
$current_node=$this->items[d_id][$i]];
$j=$i;
$i=$this->find($this->items[f_node][$i]]);//up to parent
//echo $this->items[l_node][$i]];
if(($this->items[r_node][$i]]==$current_node)) {//his parent use right point
echo ;
for ($k=0;$kcount;$k++) { echo ;}
echo items[d_id][$j]].\ target=\rightframe\>.$this->items[node_value][$j]].;
//echo $this->items[node_value][$j]];
echo items[d_id][$j]]. target=\rightframe\>add;
echo items[d_id][$j]].>del;
echo
;
echo
;
$this->items[r_node][$i]]=-1;
}
if(($this->items[l_node][$i]]==$current_node)) {//his parent use left point
echo ;
for ($k=0;$kcount;$k++) { echo ;}
echo items[d_id][$j]].\ target=\rightframe\>.$this->items[node_value][$j]].;
//echo $this->items[node_value][$j]];
echo items[d_id][$j]]. target=\rightframe\>add;
echo items[d_id][$j]].>del;
echo
;
echo
;
$this->items[l_node][$i]]=-1;
$this->count=$this->count-2;
}
$this->m_l_r_list($i);
exit;
}
}
function pages_0($d_id){//
include(conn_db.php);
$sql_query=select * from node_page where d_id=$d_id;
$query_db=mysql_query($sql_query,$connect);
$mypage=mysql_fetch_array($query_db);
include(conn_close.php);
if($mypage[d_page]!='')
{
return $mypage[d_page];
}
else return init.php;
}
function pages($d_id){//
include(conn_db.php);
$sql_query=select * from node_page where d_id=$d_id;
$query_db=mysql_query($sql_query,$connect);
$mypage=mysql_fetch_array($query_db);
include(conn_close.php);
return $mypage[d_page];
}
function showinfo_0($status){//
include(conn_db.php);
$sql_query=select * from department order by d_id;
$query_db=mysql_query($sql_query,$connect);
$info_all=mysql_num_rows($query_db);
$this->items[info_all]=$info_all;
if($status==1) {//when status=1 show all data gets from database
$mnums=$info_all;
}
if($status==0) {//when status=0 show 6 messages gets from database
$mnums=6;
}
for($i=1;$i {
$messages=mysql_fetch_array($query_db);
$this->items[d_id][$i]]=$messages[d_id];
$this->items[f_node][$i]]=$messages[f_node];
$this->items[node_value][$i]]=$messages[node_value];
$this->items[l_node][$i]]=$messages[l_node];
$this->items[r_node][$i]]=$messages[r_node];
}
include(conn_close.php);
}
}