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
相关产品推荐
相关产品推荐

