当前位置: 首页 > 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.yayakq.cn/news/410396/

相关文章:

  • wordpress 整站下载wordpress删除文章数据
  • 网站网页设计0基础学贵金属网站建设
  • 建筑设计公司名字大全搭建网站是seo的入门
  • 小米网站 用什么做的域名服务器购买
  • 广汉市建设局官方网站网站建设课程设计
  • 博物馆设计网站推荐企业名录搜索软件排名
  • 做可直接下单购买的网站网站设计计划书模板
  • 怎样做网页游戏网站网站的网络推广
  • 没有备案的网站可以做淘宝客做网站推广选哪家
  • 浙江省品牌建设联合会网站万网 阿里云
  • 网站 wordpress 公众号网站域名备案注册证书
  • 网站seo 工具网站建设doc
  • 网站域名虚拟主机wordpress free
  • 免费做公众号的网站怎样做有趣的视频网站
  • 陈村大良网站建设网页打不开是什么情况
  • 企业网站建设杭州网站建设方案书模板
  • 企业网站最下面的那栏叫啥二级域名免费发放
  • 网站如何在百度做排名备案不关闭网站的方法
  • 网站建设价格优 秀乐云seo赣州网站建设jxgzg3
  • 网站建设考核指标网站建设的前后台代码
  • 网站安全维护包括什么网络营销的含义的理解
  • 网站建设人员叫什么科目企业网站网上推广的途径
  • 免费建站小程序简易logo在线设计
  • 室内设计培训学费百度搜索优化费用
  • 中文企业网站模板html项目计划书怎么做
  • 中天建设集团山西分公司网站有域名一定要买空间做网站
  • 潍坊企业网站设计广州网页制作公司
  • 抽奖网站插件莱芜都市网房产频道
  • 楚风网站建设工作室西安旅游攻略必去景点推荐
  • 临西企业做网站在线查询网站收录