目录
https://blog.csdn.net/weixin_51766963/article/details/120135022
之前把所有写的力扣题放在一个连接里,真的太傻了,现在写起来很卡,所以现在开个转栏放各个类型。文章会慢慢搬过来的。之前的文章在这:
https://blog.csdn.net/weixin_51766963/article/details/120135022
222 Count Cmplete Tree Nodes
https://leetcode-cn.com/problems/count-complete-tree-nodes/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public int countNodes(TreeNode root) {
if(root==null)return 0;
TreeNode hl=root,hr=root;
int countLeft=0;
int countRight=0;
while (hl!=null){
hl=hl.left;
countLeft++;
}
while (hr!=null){
hr=hr.right;
countRight++;
}
if(countLeft==countRight){
return (int) (Math.pow(2,countLeft)-1);
}
return 1+countNodes(root.left)+countNodes(root.right);
}
}
236 Lowest Common Ancestor Of A Binary Tree
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null)return null;
if(root==p||root==q)return root;
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if(left!=null&&right!=null)return root;
if(left==null&&right==null)return null;
return left==null?right:left;
}
450 Delete Node In A BST
https://leetcode-cn.com/problems/delete-node-in-a-bst/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public TreeNode deleteNode(TreeNode root, int key) {
if (root == null) return null;
if (key == root.val) {
if(root.left==null)return root.right;
if(root.right==null)return root.left;
TreeNode min = getMin(root.right);
root.val=min.val;
root.right=deleteNode(root.right, min.val);
} else if (key < root.val) {
root.left=deleteNode(root.left, key);
} else {
root.right=deleteNode(root.right, key);
}
return root;
}
public TreeNode getMin(TreeNode root){
while (root.left!=null)root=root.left;
return root;
}
}
Offer 48 序列化反序列化树
https://leetcode-cn.com/problems/h54YBf/
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Codec {
// Encodes a tree to a single string.
String SEP=",";
String NULL="null";
public String serialize(TreeNode root) {
if(root==null)return "";
Queue<TreeNode>queue = new LinkedList<>();
queue.offer(root);
StringBuilder stringBuilder = new StringBuilder();
while (!queue.isEmpty()) {
TreeNode node = queue.poll();
if(node==null){
stringBuilder.append(NULL).append(SEP);
continue;
}
stringBuilder.append(root.val).append(SEP);
queue.offer(root.left);
queue.offer(root.right);
}
return stringBuilder.toString();
}
// Decodes your encoded data to tree.
public TreeNode deserialize(String data) {
if(data==null||data.isEmpty())return null;
String[] split = data.split(SEP);
TreeNode root=new TreeNode(Integer.parseInt(split[0]));
Queue<TreeNode>queue = new LinkedList<>();
queue.offer(root);
for (int i = 1; i < split.length;) {
TreeNode parent = queue.poll();
String left = split[i++];
if(left.equals(NULL)){
parent.left=null;
}else{
TreeNode leftNode = new TreeNode(Integer.parseInt(left));
parent.left=leftNode;
queue.offer(leftNode);
}
String right = split[i++];
if(right.equals(NULL)){
parent.right=null;
}else{
TreeNode rightNode = new TreeNode(Integer.parseInt(right));
parent.right=rightNode;
queue.offer(rightNode);
}
}
return root;
}
}
// Your Codec object will be instantiated and called as such:
// Codec ser = new Codec();
// Codec deser = new Codec();
// TreeNode ans = deser.deserialize(ser.serialize(root));