在BinTree中使用打字稿在PreOrder中旅行

时间:2018-04-02 09:56:20

标签: 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 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并在打字稿中实现。

2 个答案:

答案 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)]