请求排查二叉树中序遍历TypeScript实现代码的问题
修复二叉树中序遍历的TypeScript代码问题
我帮你排查出了代码里的几个关键问题,现在来逐个解决:
核心问题:递归调用函数名错误
你的函数名为TreeInArray,但递归遍历左右子树时却调用了不存在的TreePreArray——这明显是笔误,把中序(In)写成了前序(Pre),这会直接导致运行时报错。
次要问题:未完成的二叉树示例定义
你声明了bn1但没完成定义,我会补一个完整的示例二叉树,方便你测试代码。
优化建议(可选)
可以用TypeScript的可选链操作符(?.)简化存在性判断,让代码更简洁;另外数组初始化可以直接用[]替代new Array<number>(),可读性更好。
修正后的完整代码
interface BinTree { root: number; left?: BinTree; right?: BinTree; }; const TreeInArray = (t: BinTree): number[] => { let list: number[] = []; // 递归遍历左子树(中序:左->根->右) if (t.left) { list = list.concat(TreeInArray(t.left)); } // 访问根节点 list.push(t.root); // 递归遍历右子树 if (t.right) { list = list.concat(TreeInArray(t.right)); } return list; }; // 完整的示例二叉树: // 1 // \ // 2 // / // 3 let bn1: BinTree = { root: 1, right: { root: 2, left: { root: 3 } } }; // 测试调用:中序遍历结果应该是 [1, 3, 2] console.log(TreeInArray(bn1)); // 输出 [1, 3, 2]
补充说明
中序遍历的顺序是左子树 → 根节点 → 右子树,修正后的代码严格遵循了这个顺序。如果需要迭代实现(避免递归栈溢出问题),也可以告诉我,我再补充迭代版本的代码~
内容的提问来源于stack exchange,提问作者Shmuel Niraev
相关产品推荐
相关产品推荐

