当前位置: 首页 > news >正文

做网站会很忙吗优化建站

做网站会很忙吗,优化建站,滨海做网站哪家公司好,学设计的视频网站236.二叉树的公共祖先 思路 看到题想的是找到两个点的各自路径利用stack保存,根据路径长度大小将两个stack的值对齐到同一层,之后同时出栈节点,若相同则找到祖先节点。但是效率不高 看了大佬代码,递归思想很难理解。 根据大佬…

236.二叉树的公共祖先

思路

看到题想的是找到两个点的各自路径利用stack保存,根据路径长度大小将两个stack的值对齐到同一层,之后同时出栈节点,若相同则找到祖先节点。但是效率不高

看了大佬代码,递归思想很难理解。

根据大佬代码思想写了一个便于理解的版本,分为四种情况,递归求解。

代码

简单方法

    Stack<TreeNode> stack=new Stack<>();public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {int deep_p=findDeep(root,p,1);Stack<TreeNode> stack_p=new Stack<>();stack_p.addAll(stack);stack.clear();int deep_q=findDeep(root,q,1);Stack<TreeNode> stack_q=new Stack<>();stack_q=stack;//将p作为长端if (deep_p<deep_q){int temp;Stack<TreeNode> stack1=new Stack<>();temp=deep_q;stack1.addAll(stack_q);stack_q.clear();deep_q=deep_p;stack_q.addAll(stack_p);stack_p.clear();deep_p=temp;stack_p.addAll(stack1);}while (deep_p>deep_q){stack_p.pop();deep_p--;}TreeNode node_q=stack_q.pop(),node_p=stack_p.pop();while (node_q!=node_p){node_q=stack_q.pop();node_p=stack_p.pop();}return node_q;}public int findDeep(TreeNode root,TreeNode node,int deep){stack.push(root);if (root==null) return 0;if (root==node) return deep;int left=findDeep(root.left,node,deep+1);if (left==0) stack.pop();int right=findDeep(root.right,node,deep+1);if (right==0) stack.pop();return   Math.max(left,right);}

大佬代码(比较难懂,O(n))

class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root == null || root == p || root == q) return root;TreeNode left = lowestCommonAncestor(root.left, p, q);TreeNode right = lowestCommonAncestor(root.right, p, q);if(left == null) return right;if(right == null) return left;return root;}
}

思想简化代码(O(4*n),多了4次find)

public class Solution {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if (root==null) return null;if (p==root || q==root) return root;//第一种情况,p,q其中一个为祖先节点if (find(root.left,p) && find(root.left,q)){ //第二种情况,p,q在当前节点左侧return lowestCommonAncestor(root.left,p,q);}if (find(root.right,p) && find(root.right,q)){//第三种情况,p,q在当前节点右侧return lowestCommonAncestor(root.right,p,q);}//第四种情况,p,q在两边return root;}public boolean find(TreeNode root,TreeNode p){if (root==null) return false;if (root==p) return true;return find(root.left,p) || find(root.right,p);}}
http://www.dinnco.com/news/43121.html

相关文章:

  • 御花园网站建设公司推广模式包括哪些模式
  • 做网站的必要性网站开发北京公司
  • 做地产网站哪家好广告的六种广告形式
  • 郑州网站建设怎样百度竞价怎么排名第一
  • 网站css架构推广赚钱软件排行
  • 做的好的装修公司网站直销的八大课程
  • 成都网站开发排名公众号怎么引流推广
  • 怎么利用源码做网站百度搜索网址大全
  • wordpress相同字段调用aso优化重要吗
  • 做个人博客的网站浙江企业seo推广
  • 百度如何建网站湖南优化公司
  • 佛山关键词网站排名朝阳seo排名
  • 南昌网站排名优化报seo技术代理
  • 做网站推广产品代写软文费用全网天下实惠
  • 网站上面的主导航条怎么做网站设计制作哪家好
  • 机械网站源码 php网站关键词优化怎么做的
  • asp access网站建设源代码百度快速收录软件
  • 中铁建设集团有限公司招标网超级推荐的关键词怎么优化
  • 做传感器的网站关键词林俊杰百度云
  • java代码生成器东莞seo排名收费
  • 网站制作策划企业查询系统官网
  • 黑龙江建设网官方网站监理查询怎么推广软件
  • 大数据分析德阳网站seo
  • 东阳网站制作sem是做什么的
  • 网站建设及运营平台推广方式
  • 中国猎头公司排行榜seo外链查询工具
  • 树木挂牌图片自制上海外包seo
  • 低价网站建设靠谱吗微信朋友圈产品推广语
  • 青岛商城网站建设郑州网络营销哪家正规
  • 杭州建站平台百度下载电脑版