zoukankan      html  css  js  c++  java
  • leetcode-剑指58-I-II-OK

    // language C with STL(C++)
    // 剑指58-I
    // https://leetcode-cn.com/problems/er-cha-sou-suo-shu-de-zui-jin-gong-gong-zu-xian-lcof/submissions/
    // 剑指58-II
    // https://leetcode-cn.com/problems/er-cha-shu-de-zui-jin-gong-gong-zu-xian-lcof/
    
    
    /**
     * 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:
    	stack<TreeNode*> GetARoad(TreeNode* root,TreeNode* end){
    		// 本函数返回值为从root到end的一条路径,装在一个栈里,栈底是root,栈顶是end
    		stack<TreeNode*> ans;
    		TreeNode* p=root;
    		TreeNode* pre = NULL;
    		TreeNode* temp;
    		while(p || !empty(ans)){
    			if(p){
    				ans.push(p);
    				p= p->left;
    			}else{
    				p = ans.top();
    				if((p->right != NULL) && (p->right !=pre)){
    					p = p->right;
    					ans.push(p);
    					p = p->left;
    				}else{
    					temp = ans.top();
    					if(temp == end)
    						return ans;
    					else
    						ans.pop();
    					pre = temp;
    					p = NULL;
    				}
    			}
    		}
            return ans;
    	}
        TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
        	// 思路:
        	// 利用后续遍历得到从root到p和到q的路径
        	// 然后在在路径里找最近公共祖先
            stack<TreeNode*> RoadP=GetARoad(root,p);
            stack<TreeNode*> RoadQ=GetARoad(root,q);
            int SizeP = RoadP.size();
            int SizeQ = RoadQ.size();
            int min;
            if(SizeP<SizeQ)
            	min = SizeP;
            else
            	min = SizeQ;
            while(SizeP>min){
            	RoadP.pop();
            	SizeP--;
            }
            while(SizeQ>min){
            	RoadQ.pop();
            	SizeQ--;
            }
            while(true){
            	if(RoadP.top() == RoadQ.top())
            		return RoadP.top();
            	else{
            		RoadP.pop();
            		RoadQ.pop();
            	}
            }
            return NULL;
        }
    };
    
  • 相关阅读:
    前端/html5效果收藏
    Fiddler 网页采集抓包利器
    Es6 类class的关键 super、static、constructor、new.target
    js 倒计时毫秒级别显示
    雅虎34条军规
    javascript 异步请求封装成同步请求
    微信小程序 base64图片在canvas上画图
    chrome inspect 远程调试H5
    webpack 打包调试
    微信小程序云函数 添加数据到数据库
  • 原文地址:https://www.cnblogs.com/gallien/p/14367507.html
Copyright © 2011-2022 走看看