遇到问题时,我试图解决BST问题。
Converter
上面的函数应该返回一个数组,该数组包含因顺序遍历而排序的元素。但是,它的行为不符合预期。
要解决该问题,我所做的是代替对数组进行变异,而不是更改数组,而是更改了递归函数以返回新的数组eveytime。在这种情况下,它似乎可以按预期工作,即对最终返回的数组进行了排序。
为什么会这样?这与Javascript的异步行为有关吗?如果是这样,正确的解释是什么?
答案 0 :(得分:0)
这是一个有效的示例。当您仅更改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,
right:null,
value:7
},
value:5
},
right:{
left:{
left:null,
right:null,
value:15
},
right:{
left:null,
right:null,
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)