● 235. 二叉搜索树的最近公共祖先
第一个方法就是用d21类似题目的方法,有通用性,第二个方法就是利用了二叉搜索树的特性。
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null) return null;
if(root.val>p.val&&root.val>q.val){
TreeNode left = lowestCommonAncestor(root.left,p,q);
if(left!= null) return left;
}
if(root.val<p.val&&root.val<q.val){
TreeNode right = lowestCommonAncestor(root.right,p,q);
if(right!= null) return right;
}
return root;
}
}
● 701.二叉搜索树中的插入操作
我自己想的,但是一开始有问题,是while内的条件考虑错了,考虑的不全面。用gpt改出来了。
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null) return new TreeNode(val);
TreeNode head = root;
while(true){
if(val<head.val){
if(head.left==null){
head.left = new TreeNode(val);
break;
}
head = head.left;
}else{
if(head.right==null){
head.right =new TreeNode(val);
break;
}
head = head.right;
}
}
return root;
}
}
感觉要不还是递归吧。。。
class Solution {
public TreeNode insertIntoBST(TreeNode root, int val) {
if(root == null) {
return new TreeNode (val);
}
if(val<root.val){
root.left = insertIntoBST(root.left,val);
}
if(val>root.val){
root.right = insertIntoBST(root.right,val);
}
return root;
}
}
● 450.删除二叉搜索树中的节点
我不知道该return什么东西
分清楚有哪些情况。
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if(root == null) return null;/第一种情况,压根没找到结点
if(root.val == key){
if(root.left==null&&root.right==null) return null;
else if(root.left==null&&root.right!=null) return root.right;
else if(root.left!=null&&root.right==null) return root.left;
else{
TreeNode cur = root.right;//找最最左边的结点
TreeNode head = cur;//保存一下cur最开始的结点。
while(cur.left!=null){
cur=cur.left;
}
cur.left = root.left;
return head;
}
}
if(key<root.val){
root.left = deleteNode(root.left,key);
}
if(root.val< key){
root.right = deleteNode(root.right,key);
}
return root;
}
}