phpbar.de logo

Mailinglisten-Archive

[php] problem mit baumdurchlauf-algorithmus

[php] problem mit baumdurchlauf-algorithmus

LB lsblsb at gmx.de
Die Mar 8 21:17:11 CET 2005


Problem habe ich inzwischen lösen können.
Danke.

Gruß Lars

LB BL schrieb:

>hallo,
>
>ich weiss auch nicht, ich mach seit stunden rum und griegs einfach net hin. 
>zu blöd?
>
>das ist mein problem:
>ich hab in einem umfangreicheren zusammenhang einen nested-set tree in einem
>array vom prinzip her in dieser form zur verfügung:
>
>$ns_array = array("1-14","2-9","3-4",5-8","6-7","10-13","11-12");
>
>(die array werte sind in meinem fall objekte, von denen ich den linken und
>rechten wert (wäre hier z.b. für den ersten knoten links:1,rechts:14) sowie
>die vergebene id abfragen kann.)
>
>ich benötige nun einen algorithmus, der mir einen string erzeugt, der dieses
>array, bzw. den baum der dahinter steht, in eine form bringt, die nach dem
>beispiel array etwa so aussähe:
>
>1-14 2-9 3-4 2-9 5-8 6-7 5-8 2-9 1-14 10-13 11-12 10-13 1-14
>
>man geht also den baum sozusagen durch, indem man zu jedem knoten wandert
>und wieder zurück. so speichere ich den baum serialisiert ab.
>
>ich habe auch schon einen algorithmus gehabt. doch der hat einen
>mini-denkfehler. problem bei meinem bisherigen ist, dass er beim im baum
>hochgehen nicht korrekt arbeitet.
>
>ich hoffe es blickt jemand was ich meine, und hat einen lösungsvorschlag.
>
>so sah mein alg. aus (anderer zusammenhang! diesselbe logik):
>
>function get_subtree_serialized($id = NULL)
>	{
>		$subtree_serialized = "";
>		if(is_null($id))
>		{
>			$root_node = $this->get_root_node();
>			$id = $root_node["id"];
>		}
>		$subtree_nodes = $this->get_subtree_nodes($id);
>
>		$z_node = 0;
>		$depth = 0;
>		$leftsteps = 0;
>		$passed_nodes = 0;
>		$node = $subtree_nodes[0];
>		
>		for($i=intval($subtree_nodes[0]["lft"]);
>$i<intval($subtree_nodes[0]["rgt"]); $i++)
>		{
>			$node_id_len = strlen($node["id"]);
>			$node_id_len_len = strlen($node_id_len);
>			$subtree_serialized .= $node_id_len_len . $node_id_len . $node["id"]
>."<br>";
>		
>			if($depth == 0)
>			{
>				$passed_nodes = $z_node;
>			}
>			if((intval($node["rgt"])-$i) > 1)
>			{//go down
>				echo($node['id']." go down<br>");
>				$z_node++;
>				$depth++;
>				$node = $subtree_nodes[$z_node];
>			}
>			else
>			{//go up
>				echo($node['id']." go up");
>				$depth--;
>				if($depth == 0)
>				{
>					$node = $subtree_nodes[$depth];
>				}
>				else
>				{
>					$node = $subtree_nodes[$depth + $passed_nodes];
>				}
>			}
>			
>		}
>		return $subtree_serialized;
>	}
>
>
>
>  
>



php::bar PHP Wiki   -   Listenarchive