Day21 打卡二十一天

236. 二叉树的最近公共祖先

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

示例 1:

输入:root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
输出:3
解释:节点 5 和节点 1 的最近公共祖先是节点 3 。
class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        if (root == q || root == p || root == NULL) 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 right;
        else if (left != NULL && right == NULL) return left;
        else  { //  (left == NULL && right == NULL)
            return NULL;
        }
        
    }
};

 

在IntelliJ IDEA中创建一个非框架的Java Web项目(例如基于Servlets和JSP),用于实现21天挑战的功能,你需要按照以下步骤操作: 1. **新建项目**: - 打开IntelliJ IDEA,选择 "Create New Project",然后选择 "Web" 并勾选 "Non-Application Server"。 2. **项目设置**: - 选择 "Empty Application",给项目起名 "21DaysChallenge" 或类似名称,点击 "Next"。 3. **目录结构**: - 创建以下基本目录结构: ``` src/ main/ java/ com.example.21dayschallenge/ (你的包名) Challenge.java (主入口类) Day.java (表示每一天的实体) Planner.java (规划类,管理任务列表) Reminder.java (提醒类) CheckIn.java (打卡类) ShareService.java (分享服务) webapp/ WEB-INF/ web.xml (web部署描述符) classes/ (存放生成的class文件) ``` 4. **编写核心类**: - `Challenge.java`:作为应用程序的起点,可以处理用户请求并调用其他组件。 - `Day.java`: 定义每天的任务信息,包含日期和状态等属性。 - `Planner.java` 和 `Reminder.java`: 分别负责计划制定和发送提醒功能。 - `CheckIn.java`: 用户提交打卡的操作。 5. **Servlets/JSP**: - 在 `src/main/webapp/WEB-INF` 下创建 Servlets (如 `PlannerServlet`, `ReminderServlet`) 和对应的 JSP 页面 (`planner.jsp`, `reminder.jsp`)。编写Servlet处理HTTP请求,并与数据库交互。 6. **数据持久化**: - 如果需要,添加 `DatabaseConnection.java` 或连接到MySQL等数据库,存储用户的挑战计划、进度等信息。 7. **分享功能**: - 实现 `ShareService.java`,通过API或其他方式提供分享功能,比如发送邮件或社交媒体分享。 8. **部署和运行**: - 配置好 `web.xml` 文件,指定Servlet映射和错误处理。然后,通过IDEA的内置Tomcat服务器或外部服务器部署项目。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值