LeetCode 236. 二叉树的最近公共祖先
本文最后更新于619 天前,其中的信息可能已经过时,如有错误请发送邮件到tomding1065@gmail.com

https://programmercarl.com/0236.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E8%BF%91%E5%85%AC%E5%85%B1%E7%A5%96%E5%85%88.html

视频讲解:https://www.bilibili.com/video/BV1jd4y1B7E2

1.这个题还是递归的思路先做一下,然后二刷再进行进一步的了解,对于这个题我想我的困难点在于每次递归的时候,脑子里没有递归到某一个节点的时候的流程,例如本题,将下面带有p q的节点返回给上一节点的时候的处理逻辑,我没有厘清,就是当left == NULL && right != NULL的时候这个部分应该是递归返回值从下向上返回节点的时候,这个节点的左侧没有找到p q然后右面携带着p q的节点也就是答案被返回值返回给这个节点,让他们带着这个最近的公共祖先也就是答案返回给根节点,在这个地方,我没想通,最后明白了,是要将这次迭代的节点的右结点返回回来。所以是return right。这个是我这个最近做迭代的双指针的题的又一个大收获。

CPP

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     TreeNode *left;
 *     TreeNode *right;
 *     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
 * };
 */
class Solution {
public:
    TreeNode* traversal(TreeNode* node , TreeNode* p , TreeNode* q){
        if(node == NULL)return NULL;
        if(node == p || node == q)return node;

        TreeNode* left = traversal(node->left , p , q);
        TreeNode* right = traversal(node->right , p , q);

        if(left == NULL && right == NULL)return NULL;
        else if(left != NULL && right == NULL)return left;
        else if(left == NULL && right != NULL)return right;
        else return node;

        return node;
    }
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        return traversal(root , p , q);
    }
};
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
Cream_dpl