很久没用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;$j<=$this->items["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 "<table><tr><td>"; echo "<img id=image".$i." src="c.gif" onclick=outliner() style="cursor:hand" child="".$i."ALL" NAME="NAME_".$i."ALL">"; echo "<a href="".$this->pages_0($this->items["d_id][$i]"])."?d_id=".$this->items["d_id][$i]"]."" target="rightFrame">".$this->items["node_value][$i]"]."</a>"; echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo "</td></tr></table>"; echo "<div class=collapsed id=".$i."ALL>"; $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 "<table><tr><td>"; for ($k=0;$k<$this->count;$k++) { echo " ";} echo "<img id=image".$i." src="c.gif" onclick=outliner() style="cursor:hand" child="".$i."ALL" NAME="NAME_".$i."ALL">"; echo "<a href="main.php?d_id=".$this->items["d_id][$i]"]."" target="rightFrame">".$this->items["node_value][$i]"]."</a>"; //echo $this->items["node_value][$i]"]; echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>"; echo "</td></tr></table>"; echo "<div class=collapsed id=".$i."ALL>"; $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 "<table><tr><td>"; for ($k=0;$k<$this->count;$k++) { echo " ";} echo "<img id=image".$i." src="c.gif" onclick=outliner() style="cursor:hand" child="".$i."ALL" NAME="NAME_".$i."ALL">"; echo "<a href="main.php?d_id=".$this->items["d_id][$i]"]."" target="rightFrame">".$this->items["node_value][$i]"]."</a>"; //echo $this->items["node_value][$i]"]; echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>"; echo "</td></tr></table>"; echo "<div class=collapsed id=".$i."ALL>"; $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 "</div>"; $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 "<table><tr><td>"; for ($k=0;$k<$this->count;$k++) { echo " ";} echo "<a href="main.php?d_id=".$this->items["d_id][$i]"]."" target="rightFrame">".$this->items["node_value][$i]"]."</a>"; //echo $this->items["node_value][$i]"]; echo " <a href=addnode.php?id=".$this->items["d_id][$i]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo " <a href=delnode.php?id=".$this->items["d_id][$i]"]."><font size=2 color=red>Del</font></a>"; echo "</td></tr></table>"; $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 "<table><tr><td>"; for ($k=0;$k<$this->count;$k++) { echo " ";} echo "<a href="main.php?d_id=".$this->items["d_id][$j]"]."" target="rightFrame">".$this->items["node_value][$j]"]."</a>"; //echo $this->items["node_value][$j]"]; echo " <a href=addnode.php?id=".$this->items["d_id][$j]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo " <a href=delnode.php?id=".$this->items["d_id][$j]"]."><font size=2 color=red>Del</font></a>"; echo "</td></tr></table>"; echo "</div>"; $this->items["r_node][$i]"]=-1; } if(($this->items["l_node][$i]"]==$current_node)) {//his parent use left point echo "<table><tr><td>"; for ($k=0;$k<$this->count;$k++) { echo " ";} echo "<a href="main.php?d_id=".$this->items["d_id][$j]"]."" target="rightFrame">".$this->items["node_value][$j]"]."</a>"; //echo $this->items["node_value][$j]"]; echo " <a href=addnode.php?id=".$this->items["d_id][$j]"]." target="rightFrame"><font size=2 color=red>Add</font></a>"; echo " <a href=delnode.php?id=".$this->items["d_id][$j]"]."><font size=2 color=red>Del</font></a>"; echo "</td></tr></table>"; echo "</div>"; $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<=$MNums;$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"); } } |