请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

如何实现堆栈方式模拟递归记录树层级结构

老师,我用堆栈的方式实现了递归,但是这样一来我就丢失了树层级结构的相关信息,这个如何解决?

var stack = scope.option;
        scope.pid = null;
        while (stack.length) {
            var n = stack.shift();
            // n.id = scope.index ++;
            // n.pid = scope.pid;
            // if (n.id == 0) {
            //     scope.folders = [gui.addFolder(n.label)]
            // }
            // 若是最底层节点
            if (!n.children) {
                // n.pid = scope.pid;
                // scope.pid = n.id;
                // var d = { [n.id]: n.value };
              
                console.log('文件')
                // scope.folders[scope.folders.length - 1].add(d, n.id, n.min, n.max, n.value);
                continue;
            }
            if (n.children) {
                scope.pid = n.id;
                // stack.push(...getChildAtPid(n));
                stack.push(...n.children)
                // scope.folders = []
                console.log('文件夹', n.label, stack);
            }
            console.log('n', n)
        }
option: [{ label: '场景', prop: 'all', children: [
                            { label: '全景图',  prop: 'pano', children: [
                                { label: 'x', prop: 'x', value: 500, min: 0, max: 1000 },
                                { label: 'y', prop: 'y', value: 500, min: 0, max: 1000 },
                                { label: 'z', prop: 'z', value: 500, min: 0, max: 1000 },
                                { label: 'root', prop: 'prop', children: []}
                            ]},
                            { label: '模型', prop: 'model', children: [
                                { label: 'x', prop: 'x', value: 500, min: 0, max: 1000 },
                                { label: 'y', prop: 'y', value: 500, min: 0, max: 1000 },
                                { label: 'z', prop: 'z', value: 500, min: 0, max: 1000 }
                            ]},
                            { label: '摄像头', prop: 'camera', children: [
                                { label: 'x', prop: 'x', value: 500, min: 0, max: 1000 },
                                { label: 'y', prop: 'y', value: 500, min: 0, max: 1000 },
                                { label: 'z', prop: 'z', value: 500, min: 0, max: 1000 }
                            ]}
                        ] }],
  

这样实现的目的是,我使用了google的dat.GUI生成树节点组件,也没想出什么办法,我现在是把 stack.push(…n.children)替换成了一个循环来记录每个子节点的父节点信息,两重循环感觉实现总不是太好,我又不想用递归来做这个事,有什么好办法解决这个事

正在回答 回答被采纳积分+3

1回答

lewis 2021-12-21 11:23:30

把层级信息一起存到堆栈里

0 回复 有任何疑惑可以回复我~
  • 提问者 qq_crusader_1 #1
    这个stack是实时清空的,我如何存到堆栈中?
    回复 有任何疑惑可以回复我~ 2021-12-21 11:30:42
  • 提问者 qq_crusader_1 #2
    getChildAtPid(n)是一个循环,我目前是通过这个循环把父节点信息存在每个子节点中的
    回复 有任何疑惑可以回复我~ 2021-12-21 11:31:59
  • lewis #3
    跟节点一起存,存个数组[节点信息,层级信息]
    回复 有任何疑惑可以回复我~ 2021-12-21 11:32:12
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信