嗨,我接到了一个任务,要实现一个遍历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的想法,并在typescript中实现了它。
发布于 2018-04-02 18:06:56
您需要推送或者使用concat的结果。因为缺少concat结果的赋值,所以您错过了遍历分支的结果。
任一
list = list.concat(TreePreArray(t.left))
list = list.concat(TreePreArray(t.right))或
list.push(...TreePreArray(t.left))
list.push(...TreePreArray(t.right))发布于 2018-04-02 18:08:48
这实际上是迭代器的一个很好的用例:
function* leftFirst({left, right, root} : BinTree) {
yield root;
if(left) yield* leftFirst(left);
if(right) yield* leftFirst(right);
}要获得一个数组,只需执行以下操作:
[...leftFirst(someTree)]https://stackoverflow.com/questions/49609088
复制相似问题