0
点赞
收藏
分享

微信扫一扫

第四十九天-二叉树

IT程序员 2022-02-12 阅读 77

今天算是好好地放松了一下,难得没有早起,一大早就出去办事,去完医院取药又去邮局换了驾照,下午看了一部战争片,挺感动的,晚上又回去拼了盲盒,打扫了房间,也是一种放松心情的方式。只是可惜等我准备打开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));
    }
}

今天时间挺晚了,就只做了一道题,算是休息的一天吧,明天继续加油!

举报

相关推荐

0 条评论