function tree(list) {
const result = []
for (let value of list) {
// 排除空字符串的情况
if (!value) {
continue
}
const values = value.split('/')
// 查找树结构的当前级别是否已经存在,不存在则创建对象,并添加入列表。
let current = result.find(item =>item.name === values[0])
if (current === void 0) {
current = {}
result.push(current)
}
for (let i = 0, length = values.lengthi <lengthi++) {
current.name = values[i]
if (i <length - 1) {
// 如果还有下一级内容,判断当前是否有 children,没有则构建.
if (current.children === void 0) {
current.children = []
}
// 查找下一级对象,为下一遍遍历构建对象
let nextCurrent = current.children.find(item =>item.name === values[i + 1])
if (nextCurrent === void 0) {
nextCurrent = {}
current.children.push(nextCurrent)
}
current = nextCurrent
}
}
}
return result
}
============ 假装分割线 ===========
以上代码是生成树的函数,调用 tree 函数并传入你的 input 数据,返回值就是生成的树。百科没找到传代码的地方了。
关于遗传算法解决最小生成树的问题。
这是prufer编码的代码:
#include stdio.h>
#define END 0 // 结束
#define L_BRACKET 1 // 左括号
#define R_BRACKET 2 // 右括号
#define NUMBER 4 // 数
typedef struct _node
{
int value// 节点值
int childs// 子节点数
struct _node *parent// 父节点
struct _node *first_child// 第一个孩子节点
struct _node *sibling// 下一个兄弟节点
}NODE
typedef struct _token
{
int type// 标记类型(左、右括号,数)
int value// 值(仅当类型为数时有效)
}TOKEN
typedef void (*FUNC)(NODE *)
static NODE *pSmallest = 0// 指向最小的叶子节点
/* 取下一个标记
input 输入串
pToken 用于返回取得的标记
返回值 取走下一个标记后的输入串
*/
char *GetNextToken(char *input,TOKEN *pToken)
{
char *p,ch
int value
pToken->type = END
/* 跳过空白 */
p = input
while ((ch = *p) &&ch != '(' &&ch != ')' &&!isdigit(ch))
p++
switch(ch)
{
case '(': pToken->type = L_BRACKETp++break
case ')': pToken->type = R_BRACKETp++break
default:
/* 识别数 */
if (isdigit(ch))
{
value = 0
while ((ch = *p) &&isdigit(ch))
{
value = 10 * value + (ch - '0')
p++
}
pToken->type = NUMBER
pToken->value = value
}
break
}
/* 根据是否到达串尾返回不同的值*/
return (*p == '\0' ? 0 : p)
}
/* 根据输入内容构造树
input 输入串
返回值 构造的树的根节点指针
*/
NODE *BuildTree(char *input)
{
char *p
TOKEN token
NODE *pCur,*pNew,*pRoot,*pLast
p = inputpCur = pLast......
存储过程获取,其实都是一样的。只不过底层的查询语句变成存储过程写的罢了。数据传输用JSON,其实就是KEY和VALUE。把查询出来的集合、实体、各种结果包装成MAP类型。可以方便的与JSON进行转换读写。
根据需要自定义实体类,以便前后台的统一调用。这样的实体类可以与实体表出入很大。完全根据需要制定。