【发布时间】:2019-07-06 08:55:27
【问题描述】:
给定一个 TreeNode 类型的平面一维数组(参见下面的接口定义),我想遍历该数组并将后续数组元素添加为子元素。
递归做会很棒,我在非递归中使用缓冲区,但我面临的问题是如何做node.children[0].children[0]...children[0],因为请注意每个父母只有一个孩子。
Childify(results: TreeNode[]): any {
var node: TreeNode;
var buffer: TreeNode;
var count: number = 0;
for (var res of results) {
if (count == 0) {
node = res[0];
buffer = res[0];
buffer.children = [];
node.children = [];
} else if (count == 1) {
buffer.children = res[0];
} else {
node = buffer;
node.children = [];
node.children.push(res[0]);
buffer = <TreeNode>node.children;
}
count++;
}
}
接口定义:
export interface TreeNode {
label?: string;
data?: any;
icon?: any;
expandedIcon?: any;
collapsedIcon?: any;
children?: TreeNode[]; <---------------
leaf?: boolean;
expanded?: boolean;
type?: string;
parent?: TreeNode;
partialSelected?: boolean;
styleClass?: string;
draggable?: boolean;
droppable?: boolean;
selectable?: boolean;
}
输入:
TreeNode[] = [treeNode1, treeNode2, treeNode3, 树节点4,...,树节点X]
输出是一个 TreeNode 对象,嵌套在 children 属性中(也是 TreeNode 类型):
TreeNode = treeNode1
treeNode1.children = treeNode2
treeNode2.children = treeNode3
treeNode3.children = treeNode4
treeNodeX-1.children = treeNodeX
我不知道如何为循环中的 X 个孩子动态调用 treeNode1.children[0].children[0]......children[0],以分配给下一级孩子在树节点 1 中。
【问题讨论】:
-
基于什么插入节点?您希望生成的三个看起来如何?
标签: arrays typescript recursion primeng