Javascript 在typescript中的BinTree上按预先顺序移动

Javascript 在typescript中的BinTree上按预先顺序移动,javascript,typescript,Javascript,Typescript,嗨,我被分配了一个任务来实现一个在bin树上迭代的函数 按预定顺序返回其所有值。代码如下: interface BinTree { root: number; left?: BinTree; right?: BinTree; }; const TreePreArray =(t:BinTree):number[] => { let list = new Array<number>(); if (t==undefined) {return l

嗨,我被分配了一个任务来实现一个在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)));
接口二叉树{
根:数字;
左?:二叉树;
对吗?:BinTree;
};
const treeparray=(t:BinTree):编号[]=>{
let list=新数组();
如果(t==未定义){返回列表}
否则{
list.push(t.root)
列表。混凝土(树耳环(t.左))
列表。混凝土(树耳环(t.右侧))
}
返回列表
}
设bn:BinTree={
根:1,
左:{root:2},
右:{root:3}
}
console.log((treeparray(bn));
但是输出结果只是[1]而不是[1,2,3]我从这个链接复制了这个想法
并在typescript中实现。

您需要推送或使用
concat的结果。由于缺少
concat
结果的赋值,您将错过遍历分支的结果

或者

list = list.concat(TreePreArray(t.left))
list = list.concat(TreePreArray(t.right))


这实际上是迭代器的一个非常好的用例:

 function* leftFirst({left, right, root} : BinTree) {
  yield root; 
  if(left) yield* leftFirst(left); 
  if(right) yield* leftFirst(right); 
 }
要获取数组,只需执行以下操作:

 [...leftFirst(someTree)]
 [...leftFirst(someTree)]