【发布时间】:2019-10-01 18:22:48
【问题描述】:
如果输入字符串是有效或无效的 BST(二叉搜索树),我必须返回 true 或 false。
问题是我输入了一个带有这种“模式”的非典型字符串:(ROOT(LEFT,RIGHT)); 每个元素之间有一个空格,ROOT 是中心节点,LEFT 是左边的节点,RIGHT 是右边的节点。如果一个节点为空,则编码为“-”,一个叶子用数值编码,如果一个节点有一些孩子,则以这种方式编码:例如B有两个孩子(D在左边,E在右边)所以( A ( B ( D , E ) , C ) )
我试图将字符串拆分为一个字符串数组,但我不知道如何填充树并同时检查它是否是 BST。我如何用这个字符串填充树?
我会尝试这个算法:
//我如何拆分字符串
String[] albero = b.readLine().split("\\,|\\(|\\)|\\-");
//我将如何检查是否是 BST
public class IsBST {
public boolean isBST(Node root){
return isBST(root, Integer.MIN_VALUE, Integer.MAX_VALUE);
}
private boolean isBST(Node root, int min, int max){
if(root == null){
return true;
}
if(root.data <= min || root.data > max){
return false;
}
return isBST(root.left, min, root.data) && isBST(root.right, root.data, max);
}
例子:
输入 1:(100(19(17(2、7)、3)、36(25、1)))
输出 1:假
输入 2: ( 8 ( 3 ( 1 , 6 ( 4 , 7 ) ) , 10 ( - , 14 ( 13 , - ) ) ) )
输出 2:真
【问题讨论】:
标签: java string binary-search-tree