day18 98. 验证二叉搜索树&&700. 二叉搜索树中的搜索&&617. 合并二叉树&&654. 最大二叉树
1.验证二叉搜索树(98. 验证二叉搜索树):
isValidBST(TreeNode root) 方法用于判断给定的二叉树是否为二叉搜索树。
首先检查根节点是否为空,若为空则返回 true。
然后检查根节点的左子节点值是否大于等于根节点值,右子节点值是否小于等于根节点值,若有不满足则返回 false。
接着找到左子树的最右节点和右子树的最左节点,检查它们的值与根节点值的关系,若不满足二叉搜索树的条件则返回 false。
最后递归地检查左子树和右子树是否为二叉搜索树。
//98. 验证二叉搜索树
public boolean isValidBST(TreeNode root) {
if (root == null) return true;
if(root.left!=null&&root.left.val >= root.val){
return false;
}
if(root.right!=null&&root.right.val <= root.val){
return false;
}
TreeNode cur1 =root.left;
TreeNode cur2 =root.right;
if (cur1!=null) while (cur1.right!=null) cur1 = cur1.right;
if (cur2!=null) while (cur2.left!=null) cur2 = cur2.left;
if(cur1!=null&&cur1.val>=root.val){
return false;
}
if(cur2!=null&&cur2.val<=root.val){
return false;
}
return isValidBST(root.left)&&isValidBST(root.right);
}
2.二叉搜索树中的搜索(700. 二叉搜索树中的搜索):
searchBST(TreeNode root, int val) 方法用于在给定的二叉搜索树中搜索值为 val 的节点。
若根节点为空,返回 null。
若根节点值等于 val,返回根节点。
若根节点值大于 val,则在左子树中继续搜索;否则在右子树中继续搜索。
//700. 二叉搜索树中的搜索
public TreeNode searchBST(TreeNode root, int val) {
if (root == null) return null;
if (root.val == val) {
return root;
}else if (root.val > val) {
return searchBST(root.left, val);
}else{
return searchBST(root.right, val);
}
}
3.合并二叉树(617. 合并二叉树):
mergeTrees(TreeNode root1, TreeNode root2) 方法用于合并两棵二叉树。
若两棵树都为空,返回 null。
若其中一棵树为空,返回另一棵树。
创建一个新节点,其值为两棵树对应节点值之和。
递归地合并左子树和右子树,并将结果赋给新节点的左右子节点。
//617. 合并二叉树
public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
if (root1null&&root2null) return null;
if (root1null) return root2;
if (root2null) return root1;
TreeNode res=new TreeNode(root1.val+root2.val);
res.left=mergeTrees(root1.left,root2.left);
res.right=mergeTrees(root1.right,root2.right);
return res;
}
最大二叉树(654. 最大二叉树):
constructMaximumBinaryTree(int[] nums) 方法用于根据给定的数组构建最大二叉树。
调用 dfsConstructMinimumBinaryTree(int[] nums, int start, int end) 方法进行递归构建。
在 dfsConstructMinimumBinaryTree 方法中,找到数组 nums 中指定范围内的最大值及其索引。
以最大值为根节点,递归地构建左子树和右子树。
//654. 最大二叉树
public TreeNode constructMaximumBinaryTree(int[] nums) {
return dfsConstructMinimumBinaryTree(nums, 0, nums.length - 1);
}
private TreeNode dfsConstructMinimumBinaryTree(int[] nums, int start, int end) {
if (start > end) return null;
int max = nums[start];
int index=start;
for (int i = start+1; i <= end; i++) {
if (max < nums[i]) {
max = nums[i];
index = i;
}
}
TreeNode root = new TreeNode(max);
root.left = dfsConstructMinimumBinaryTree(nums, start, index-1);
root.right = dfsConstructMinimumBinaryTree(nums, index+1, end);
return root;
}

浙公网安备 33010602011771号