如何解决与打字稿递归有关的问题
遇到问题时,我试图解决BST问题。
Converter
上面的函数应该返回一个数组,该数组包含因顺序遍历而排序的元素。但是,它的行为不符合预期。
要解决该问题,我所做的是代替对数组进行变异,而不是更改数组,而是更改了递归函数以返回新的数组eveytime。在这种情况下,它似乎可以按预期工作,即对最终返回的数组进行了排序。
为什么会这样?这与Javascript的异步行为有关吗?如果是这样,正确的解释是什么?
解决方法
这是一个有效的示例。当您仅更改arr
时,可以发布inorder()
并将其打印出来。否则,您只需将另一个函数包装在inorder
之上,并在函数末尾返回arr
。
let arr: number[] = []
interface BST{
left:BST | null,right:BST | null,value:number
}
function inorder(tree: BST | null): void {
if(tree !== null) {
inorder(tree.left)
arr.push(tree.value)
inorder(tree.right)
}
}
const bstData: BST={
left:{
left:{
left:null,right:null,value:3
},right:{
left:null,value:7
},value:5
},right:{
left:{
left:null,value:15
},value:25
},value:20
},value:10
}
inorder(bstData)
console.log(arr)
编辑1:创建包装函数
function inorderWrapper(tree: BST | null) {
let arr: number[] = []
function inorder(tree: BST | null): void {
if (tree !== null) {
inorder(tree.left)
arr.push(tree.value)
inorder(tree.right)
}
}
inorder(tree)
return arr;
}
inorderWrapper(data)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。