} else { $this->left->insert($n); } } } } $t = new Tree('F'); $n1 = new Tree('B'); $n2 = new Tree('G'); $n3 = new Tree('A'); $n4 = new Tree('D'); $n5 = new Tree('C'); $n6 = new Tree('E'); $n7 = new Tree('I'); $n8 = new Tree('H'); $t->insert($n1); $t->insert($n2); $t->insert($n3); $t->insert($n4); $t->insert($n5); $t->insert($n6); $t->insert($n7); $t->insert($n8); function preorder($tree) { if (!$tree->left && !$tree->right) { return $tree; } if ($tree->left) { echo $tree->left->key, " "; preorder($tree->left);
public static function search($node, $main_buss_id) { if ($node === NULL || $node === "" || $main_buss_id === NULL || $main_buss_id === "") { QconfMgrLog::err(__FILE__, __LINE__, "node_id or main_buss_id is NULL"); return FALSE; } ArgsUtil::setSQLEscape($node); ArgsUtil::setSQLEscape($main_buss_id); $query = "select * from qconf_node where main_buss_id = '{$main_buss_id}'" . " and node like '%{$node}%' order by node_whole"; $res = self::executeQuery($query); if ($res === FALSE) { return FALSE; } // not found the node $num = mysql_num_rows($res); if ($num === 0) { return FALSE; } $tree = new Tree(); while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) { $tree->insert($row['node_id'], $row['parent_node_id'], $row); $p_row = $row; while ($p_row['parent_node_id'] != 0) { $query = "select * from qconf_node where node_id = '" . $p_row['parent_node_id'] . "'"; $p_res = self::executeQuery($query); if ($p_res === FALSE) { return FALSE; } $p_row = mysql_fetch_array($p_res, MYSQL_ASSOC); $tree->insert($p_row['node_id'], $p_row['parent_node_id'], $p_row); } } return $tree->getTree(); }
/** * 增加一条路由规则 * @param array $paths * @param array $params * @param mixed $e * @return boolean */ public function insertByArray($paths, $params, $e) { //生成树形的路由表,便于快速查找, // 如 规则 // "/b/a?z=1&y=2" => service1 // "/b/a?z=1&x=2" => service2 // 对应的 规则结构是 // path -> a+ // |-b+ // param -> |-x+ // |-z => service2 // |-y+ // |-z => service1 // // // $paths = array_filter($paths, function ($i) { return !empty($i); }); array_unshift($paths, '/'); if (empty($paths)) { $paths = array(''); } if ($params !== null) { //排序,使参数与顺序无关 sort($params, SORT_STRING); $params = array_filter($params, function ($i) { return !empty($i); }); $node = $this->routes->findNode($paths, true, true); if ($node && $node['value'] instanceof \phprs\util\Tree) { $route = $node['value']; return $route->insert($params, $e, false); } else { $route = new Tree(); $route->insert($params, $e, false); return $this->routes->insert($paths, $route, false); } } else { return $this->routes->insert($paths, $e, false); } }
if ($this->left == null) { // insert $this->left = $n; $n->parent = $this; } else { $this->left->insert($n); } } } } $t = new Tree(10); $n1 = new Tree(20); $n2 = new Tree(5); $n3 = new Tree(7); $n4 = new Tree(13); $t->insert($n1); $t->insert($n2); $t->insert($n3); function find_common($node1, $node2, $tree) { if ($node1->key < $tree->key && $node2->key > $tree->key) { return $tree; } else { if ($node1->key < $tree->key && $node2->key < $tree->key) { find_common($node1, $node2, $tree->left); } else { if ($node1->key > $tree->key && $node2->key > $tree->key) { find_common($node1, $node2, $tree->right); } } }