You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript二叉树PreOrder前序遍历函数实现问题求助

修复二叉树前序遍历代码的问题

我帮你排查出代码里的核心问题啦,咱们一步步拆解和修正:

问题根源

你的前序遍历逻辑思路是对的(根→左→右),但**Array.concat()方法的使用有误**。JavaScript/TypeScript中的concat()不会修改原数组,它会返回一个包含原数组与拼接内容的新数组。你现在只是调用了concat却没有把返回的新数组赋值给list,导致左右子树的遍历结果根本没被合并到最终的结果数组里。

另外还有个小细节:递归调用时t.left或t.right可能是undefined,所以函数参数的类型应该加上undefined,避免类型报错。

修正方案1:正确处理concat的返回值

把每次concat返回的新数组重新赋值给list,这样就能把左右子树的结果合并进来:

interface BinTree { root: number; left?: BinTree; right?: BinTree; };
const TreePreArray =(t: BinTree | undefined): number[] => {
  let list = new Array<number>();
  if (t === undefined) {
    return list;
  } else {
    list.push(t.root);
    // 关键:将concat返回的新数组赋值给list
    list = list.concat(TreePreArray(t.left));
    list = list.concat(TreePreArray(t.right));
  }
  return list;
}

修正方案2:用扩展运算符简化代码

如果你喜欢更简洁的函数式写法,可以用扩展运算符...直接拼接数组,省去中间变量:

interface BinTree { root: number; left?: BinTree; right?: BinTree; };
const TreePreArray =(t: BinTree | undefined): number[] => {
  // 空树直接返回空数组
  if (!t) return [];
  // 按前序顺序拼接根节点、左子树遍历结果、右子树遍历结果
  return [
    t.root,
    ...TreePreArray(t.left),
    ...TreePreArray(t.right)
  ];
}

测试验证

用你给出的树结构(补全后)测试:

let bn : BinTree = { 
  root: 1, 
  left: { root: 2 }, 
  right: { root: 3 } 
};
console.log(TreePreArray(bn)); // 输出 [1,2,3],符合前序遍历预期

内容的提问来源于stack exchange,提问作者Shmuel Niraev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:33:43