今天算是好好地放松了一下,难得没有早起,一大早就出去办事,去完医院取药又去邮局换了驾照,下午看了一部战争片,挺感动的,晚上又回去拼了盲盒,打扫了房间,也是一种放松心情的方式。只是可惜等我准备打开maven课程开始学的时候,发现课程已经下架了,所以,就继续配置环境吧,看了一眼vsftpd的配置课程,发现有点复杂,只能放到明天了。
今日进度:
1.开始尝试减轻药量,希望能早日停药
2.意识到隔一段时间适当放松一下也是必要的,精神持续太紧绷反而不利于思考算法问题,昨天觉得很难理解的题,今天休息了一下,在放松的状态下,一下子就理解了
3.保持充足睡眠非常重要,尽量早点睡,只是睡眠改善,配合用药,需要控制饮食少食多餐,加强运动来避免体重增加,可能还要加大运动量,至少要每天半个小时
4.坚持户外运动,今天姑且算是户外散步
5.加快动作,减少非必要动作,现在时间排得越来越满,有时候会感到十分焦虑,需要通过适当放松来调节
6.坚持录小王子?坚持阅读,明天可以抽一段时间出来看书,不然书买了也没有看
7.坚持早睡
学习笔记:
236. 二叉树的最近公共祖先
给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。
百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”
解题思路:二叉树中两个节点的最近公共祖先有几种情况:一是节点分别在根节点的左右子树中,二是一个节点等于根节点,另一个节点在左或右子树中,使用后序遍历,最先找到的根节点一定是最近的公共祖先,这两种情况下根节点就是要找的节点。如果两个节点都在左子树或右子树中,递归调用,直到满足搜索条件或者节点为空结束。使用一个方法来判断节点是否在root的左右子树中。
class Solution {
TreeNode res = new TreeNode();
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
isContain(root, p, q);
return res;
}
public boolean isContain(TreeNode root, TreeNode p, TreeNode q){
if(root==null){
return false;
}
//分别判断节点pq是否在root的左子树或右子树中
boolean lson = isContain(root.left, p, q);
boolean rson = isContain(root.right, p, q);
//三种情况root为最近公共祖先:pq分别在两个子树中;pq一个在根节点,另一个在子树中
if((lson && rson) || ((root.val==p.val || root.val==q.val) && (lson || rson))){
res = root;
}
//判断pq是否在root的子树中
return (lson || rson || (root.val==q.val || root.val==p.val));
}
}
今天时间挺晚了,就只做了一道题,算是休息的一天吧,明天继续加油!