zoukankan      html  css  js  c++  java
  • leecode第二百三十六题(二叉树的最近公共祖先)

    /**
     * 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:
        void serch_patch(TreeNode* root, TreeNode* node,vector<TreeNode*> &path,bool &is_search)
        {
            path.push_back(root);
            if(root->val==node->val)//要是找到路径了
            {
                is_search=true;//标志修改,然后返回
                return;
            }
            
            if(root->left!=NULL)
                serch_patch(root->left,node,path,is_search);
            if(is_search)//在左边找到了,就不用在右面找了
                return;
            
            if(root->right!=NULL)
                serch_patch(root->right,node,path,is_search);
            if(is_search)//在右面找到了,就不用删除根节点了
                return;
            path.pop_back(); 
        }
        
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
            bool is_flag=false;
            vector<TreeNode*> path_p;
            serch_patch(root,p,path_p,is_flag);//寻找root到p的路径
            is_flag=false;
            vector<TreeNode*> path_q;
            serch_patch(root,q,path_q,is_flag);//寻找root到q的路径
            
            int len=min(path_p.size(),path_q.size());
            TreeNode* res=root;
            for(int i=0;i<len;i++)//比较当前路径,若在最小长度下找到一致的就记住,即便一致都相等,也可以用最后一个
            {
                if(path_p[i]==path_q[i])
                    res=path_p[i];
            }
            return res;//找不到就返回root,无所谓的
        }
    };

    分析:

    一不是二叉搜索树,二没有父节点信息,只想到用路径去判断了。

  • 相关阅读:
    oracle查询锁表解锁语句
    转:js,jQuery 排序的实现,网页标签排序的实现,标签排序
    禁止页面缩放功能
    js 操作 cookie
    random模块
    以及模块的四种形式模块的四种形式和模块的调用
    函数的调用
    函数的返回值
    可变长参数
    函数的重点内容
  • 原文地址:https://www.cnblogs.com/CJT-blog/p/10723965.html
Copyright © 2011-2022 走看看