给定一个数字列表,确定它是否可以表示二叉搜索树(BST)的预订遍历列表。
public boolean isValid(int[] arr)
{
int root = arr[0];
int i=1;
while( i< arr.length && root >arr[i])
{
i++;
}
for(;i<arr.length;i++)
{
if(arr[i] <root)
{
return false;
}
}
return true;
}
上述功能适用于大多数案例ex {3,4,5,1,2}
,{3, 2, 1, 5, 4, 6}
,{1,2,3}
。
但它对{1,3,4,2}
无效。
任何人都可以帮我解决问题。
答案 0 :(得分:0)
“想法”会列出更多3个元素的列表,您可以在BST中识别left
,right
和root
,就像前三个元素一样。现在,当且仅当left<=root<=right
时,它才是预订。现在root
进入堆栈并接下来的3并应用相同的逻辑。
直到你有少于三个元素:
left
root
和left<=root
root
在这两种情况下,您都必须将root
放入堆栈中。
现在获取堆栈并应用相同的逻辑......直到堆栈中只有一个元素,这意味着它是预订BST。
现在把它写成递归函数非常简单有趣。