嗨我被赋予了一个任务来实现一个迭代bin树的函数 以预先的顺序返回其所有值。代码如下:
interface BinTree {
root: number;
left?: BinTree;
right?: BinTree;
};
const TreePreArray =(t:BinTree):number[] => {
let list = new Array<number>();
if (t==undefined) {return list }
else {
list.push(t.root)
list.concat(TreePreArray(t.left))
list.concat(TreePreArray(t.right))
}
return list
}
let bn : BinTree = {
root: 1,
left: { root: 2 },
right: { root: 3 }
}
console.log((TreePreArray(bn)));
但是输出只有[1]而不是[1,2,3]我从这个链接复制了这个想法 Recursive Tree Traversal Method With Return Type Array并在打字稿中实现。
答案 0 :(得分:1)
您需要推送或使用concat
的结果。由于缺少concat
结果的分配,你会错过在分支机构旅行的结果。
无论
list = list.concat(TreePreArray(t.left))
list = list.concat(TreePreArray(t.right))
或
list.push(...TreePreArray(t.left))
list.push(...TreePreArray(t.right))
答案 1 :(得分:0)
这实际上是迭代器的一个非常好的用例:
function* leftFirst({left, right, root} : BinTree) {
yield root;
if(left) yield* leftFirst(left);
if(right) yield* leftFirst(right);
}
然后得到一个数组:
[...leftFirst(someTree)]