验证二叉搜索树
- 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
public boolean isValidBST(Node root) {
boolean A = false;
boolean B = false;
if (root == null) {
return true;
}
if (root.left == null && root.right == null) {
return true;
} else {
if (root.left != null && root.left.data < root.data) {
A = isValidBST(root.left);
}else if (root.left == null){
A = isValidBST(root.left);
} else {
return false;
}
if (root.right != null && root.right.data > root.data) {
B = isValidBST(root.right);
}else if (root.right == null){
B = isValidBST(root.right);
} else {
return false;
}
}
if (A == false || B == false) {
return false;
}
return true;
}
LeetCode不给过,我也不知道我错哪了
将有序数组转换为二叉搜索树
- 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 高度平衡 二叉搜索树。
高度平衡 二叉树是一棵满足「每个节点的左右两个子树的高度差的绝对值不超过 1 」的二叉树。
public Node sortedArrayToBST(int[] nums) {
ArrayList<Integer> left = new ArrayList<>();
ArrayList<Integer> right = new ArrayList<>();
int numsLength = nums.length / 2;
for (int i = 0; i < numsLength; i++) {
left.add(nums[i]);
}
for (int i = numsLength; i < nums.length; i++) {
right.add(nums[i]);
}
Node node = new Node(right.get(0));
Node leftNode = node;
Node rightNode = node;
for (int i = 0; i < left.size(); i++) {
while (leftNode.left == null){
leftNode.left = new Node(left.get(i));
break;
}
leftNode = leftNode.left;
}
for (int i = 1; i < right.size(); i++) {
while (rightNode.right == null){
rightNode.right = new Node(right.get(i));
break;
}
rightNode = rightNode.right;
}
return node;
}
这题咱也看不懂,大概就是这样叭...LeetCode依旧不给过
LeetCode实例的数据拿来测试也没问题...