今日安排
- 剑指offer三道并整理
- 自己独立玩成用户中心的后端代码的编写
- 学习有关Session跟Cookie的相关知识点并做好笔记
学习过程
剑指offer34:二叉树中和为某一值的路径
给你二叉树的根节点 root 和一个整数目标和 targetSum ,找出所有 从根节点到叶子节点 路径总和等于给定目标和的路径。
叶子节点 是指没有子节点的节点。
输入:root = [5,4,8,11,null,13,4,7,2,null,null,5,1], targetSum = 22
输出:[[5,4,11,2],[5,8,4,5]]
解题思路:
可以通过回溯法进行解决,包含先序遍历+路径记录来实现
代码如下:
class Solution {
LinkedList<List<Integer>> res = new LinkedList<>();
LinkedList<Integer> path = new LinkedList<>();
public List<List<Integer>> pathSum(TreeNode root, int target) {
recur(root , target);
return res;
}
public void recur(TreeNode root, int target){
if(root == null)
return;
path.add(root.val);
target -= root.val;
if(target == 0 && root.left == null && root.right == null)
res.add(new LinkedList(path));
recur(root.left,target);
recur(root.right,target);
path.removeLast();
}
}
剑指offer36:二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。
解题思路:
二叉搜索树就是中序遍历,通过中序遍历确定前一个节点和后一个节点相连接即可。
代码如下:
class Solution {
Node pre,head;
public Node treeToDoublyList(Node root) {
if(root == null)
return null;
dfs(root);
head.left = pre;
pre.right = head;
return head;
}
void dfs(Node cur){
if(cur == null)
return;
dfs(cur.left);
if(pre == null){
head = cur;
}
else if (pre != null){
pre.right = cur;
}
cur.left = pre;
pre = cur;
dfs(cur.right);
}
}
剑指offer54:二叉搜索树的第k大结点
给定一棵二叉搜索树,请找出其中第 k
大的节点的值。
解题思路:
一般解法:可以先通过中序遍历,把所有的值存在一个有序的列表里面后,直接拿取第k大的数
高效解法:直接将中序遍历变形,遍历顺序变为右中左倒着输出。
代码如下:
class Solution {
int res = 0 ,count = 0;
public int kthLargest(TreeNode root, int k) {
helper(root,k);
return res;
}
void helper(TreeNode root ,int k){
if(root.right != null)
helper(root.right ,k);
if(++count == k){
res = root.val;
return;
}
if(root.left != null)
helper(root.left, k);
}
}
学习有关Session跟Cookie的相关知识点并做好笔记
相关问题
-
实体类为什么要实现序列化
HttpSession保存到文件或者数据库中需要通过序列化的方式,而把HTTP Session从文件系统中拿出来或者数据库中拿出来则要进行反序列化。
就好比你买了一套家具从你家门放进你的房间,需要先把家具拆下来放到你的房间里面去在进行组装出来。
-
PostMapping,GetMapping和RequestMapping的区别
P Session从文件系统中拿出来或者数据库中拿出来则要进行反序列化。
就好比你买了一套家具从你家门放进你的房间,需要先把家具拆下来放到你的房间里面去在进行组装出来。