zoukankan      html  css  js  c++  java
  • leetcode 236 而哈数的最近公共祖先

    简介

    dfs 找出路劲,然后长链在短链里面找.

    code

    /**
     * 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:
        int level = 0;
        vector<TreeNode*> path1;
        vector<TreeNode*> path2;
        bool dfs(TreeNode *n, vector<TreeNode*> &path, TreeNode *p){
            if(n == p){
                path.push_back(n);
                return true;
            }
            if(n->left){
                if(dfs(n->left, path, p)){
                    path.push_back(n);
                    return true;
                }
            }
            if(n->right){
                if(dfs(n->right, path, p)){
                    path.push_back(n);
                    return true;
                }
            }
            return false;
        }
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            dfs(root, path1, p);
            dfs(root, path2, q);
            // 长链在短链找
            if(path1.size() >= path2.size()){
                int i=0;
                while(i<path1.size()){
                    if(find(path2.begin(), path2.end(), path1[i])!= path2.end()){
                        return path1[i];
                    }
                    i++;
                }
            }
            else{
                int i= 0;
                while(i<path2.size()){
                    if(find(path1.begin(), path1.end(), path2[i])!= path1.end()){
                        return path2[i];
                    }
                    i++;
                }
            }
            return nullptr;
        }
    };
    
    class Solution {
        private TreeNode ans;
        public Solution() { // 使用公共变量记得在构造函数中初始化
            this.ans = null;
        }
        private boolean dfs(TreeNode root, TreeNode p, TreeNode q){
            if(root == null) return false;
            bool lson = dfs(root.left, p, q);
            bool rson = dfs(root.right, p, q);
            if((lson && rson) || ((root.val == p.val || root.val == q.val) && (lson || rson))) {
                ans = root;
            }
            return lson || rson || (root.val == p.val || root.val == q.val));
        }
        public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
            this.dfs(root, p, q);
            return this.ans;
        }
    }
    
    
    Hope is a good thing,maybe the best of things,and no good thing ever dies.----------- Andy Dufresne
  • 相关阅读:
    maptalks 开发GIS地图(16)maptalks.three.09
    maptalks 开发GIS地图(15)maptalks.three.08
    maptalks 开发GIS地图(14)maptalks.three.07
    maptalks 开发GIS地图(12)maptalks.three.05 bar-music
    Use mongoose-CRUD operations
    First Mongoose Model
    MongoDB-1-CRUD Operations
    Mongo DB-0
    Kill port process
    Defining RESTful Routes(CRUD operations)
  • 原文地址:https://www.cnblogs.com/eat-too-much/p/14801141.html
Copyright © 2011-2022 走看看