ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

30 Day Challenge Day 7 | Leetcode 235. Lowest Common Ancestor of a Binary Search Tree

2020-09-11 03:32:09  阅读:308  来源: 互联网

标签:Lowest Binary arr TreeNode val node ret1 root Day


题解

方法:DFS Search

找两个节点的最低祖宗节点,想到用深度优先搜索,先找到从根节点到达该节点的路径,然后遍历两条路径,找到最低的共同祖宗节点。可以通过测试。

然后后来发现我把问题复杂化了,忽略了题目中的条件,“平衡二叉树”,也就是说,节点是有顺序的,而我完全没有用上。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        vector<TreeNode*> arr1, arr2, ret1, ret2;
        search(root, p, arr1, ret1);
        search(root, q, arr2, ret2);

        int i = 0;
        while(i < ret1.size() && i < ret2.size() && ret1[i] == ret2[i]) {
            i++;
        }
        if(i > 0) i--;

        return ret1[i];
    }
    
    void search(TreeNode* node, TreeNode* t, vector<TreeNode*>& arr, vector<TreeNode*>& ret) {
        if(!node) return;

        arr.push_back(node);

        if(node == t) {
            for(auto n : arr) {
                ret.push_back(n);
            }
            return;
        }

        if(node->left) search(node->left, t, arr, ret);
        if(node->right) search(node->right, t, arr, ret);

        arr.pop_back();
    }
};

方法:平衡二叉树搜索

这里while的判断条件设置地很巧妙,只需要判断与root的值的差是不是同为正或同为负,那么就可以知道,p和q是不是都在root左边或者右边。如果不是,无论是等于0的情况还是,小于0的情况,都找到了共同祖先。

class Solution {
public:
    TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        while((root->val - p->val)*(root->val - q->val) > 0) {
            root = (root->val > p->val) ? root->left : root->right;
        }
        return root;
    }
};

标签:Lowest,Binary,arr,TreeNode,val,node,ret1,root,Day
来源: https://www.cnblogs.com/casperwin/p/13649411.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有