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

免费建站网站黄金网站阳江58同城网招聘最新招聘

免费建站网站黄金网站,阳江58同城网招聘最新招聘,js不能打开插件wordpress,电子商务网站建设培训课件描述: 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节…

描述:

给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。

百度百科中最近公共祖先的定义为:“对于有根树 T 的两个节点 p、q,最近公共祖先表示为一个节点 x,满足 x 是 p、q 的祖先且 x 的深度尽可能大(一个节点也可以是它自己的祖先)。”

方法一:

思路情况一p或者q其中一个是root,直接返回root;情况二,p或者q分别在root的左右子树上,递归找到root,情况三,p和q都在左子树或右子树上,这样有可能是递归后得到的情况一,或者是递归后的情况二

//给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。前提:q!=p
//https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-tree/description/
//思路:情况一p或者q其中一个是root,直接返回root;情况二,p或者q分别在root的左右子树上,递归找到root,
//情况三,p和q都在左子树或右子树上,这样有可能是递归后得到的情况一,或者是递归后的情况二
//csdn:
public class Test4 {public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(p==root || q==root)return root;//情况一和情况二if (root==null)return null;TreeNode rootleft=lowestCommonAncestor(root.left,p,q);TreeNode rootright=lowestCommonAncestor(root.right,p,q);//情况三if(rootleft!=null && rootright!=null)return root;//情况三下的情况二//p和q都在左子树或右子树上,else if(rootleft!=null && rootright==null)return rootleft;else if(rootleft==null && rootright!=null)return rootright;return null;//没有找到}}

方法二 

思路我们用两个栈分别存储root到p和q经过的节点路径,当递归到某个节点时,这个节点的左右子树都没有p或者q,说明该节点不是路径上的节点,出栈,两个栈存储完毕后保证两个栈的大小长度一样,一块出栈,当出栈元素相同时就是交点
 public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {if(root==null)return null;Stack<TreeNode> stack_q=new Stack<>();Stack<TreeNode>stack_p=new Stack<>();getStack(root,stack_p,p);//寻找从根节点到p节点路径getStack(root,stack_q,q);//寻找从根节点到q节点路径int size_p=stack_p.size();int size_q=stack_q.size();//保证连个栈的长度一样if(size_p>size_q){for (int i = 0; i < size_p-size_q; i++) {stack_p.pop();}} else if (size_p<size_q) {for (int i = 0; i < size_q - size_p; i++) {stack_q.pop();}}//一块出一个元素,当元素相同时就是交点while (stack_p!=null){if(stack_p.peek()==stack_q.peek())return stack_p.pop();else {stack_p.pop();stack_q.pop();}}return root;}public boolean getStack (TreeNode root,Stack<TreeNode> stack,TreeNode key){if(root==null)return false;stack.push(root);if(root==key)return true;boolean figleft=getStack(root.left,stack,key);if(figleft)return true;//左边找到了节点boolean figright=getStack(root.right,stack,key);if (figright)return true;//右边找到了节点stack.pop();//该节点的左右子树都没有寻找的节点,从栈上,或者路径上移除return false;}
http://www.yayakq.cn/news/543579/

相关文章:

  • cms网站内容管理系统公司网站怎么建立需要多少钱
  • 网站开发方面知识网站开发服务商
  • 网站开发什么语言安全网站登录页面模板 下载
  • 买证书网站开发工程师建设留学网站
  • 自己做直播网站在线网站建设平台
  • 腾讯云搭建网站成都 网站建设培训
  • 做个网站软件多少钱做 英语试题的网站
  • 恒华大厦做网站公司建设信用卡中心网站首页
  • 手机网站 微信链接怎么做网站页面模板 建设中
  • 企业wordpress主题免费下载广东网络优化推广
  • 哪个设计网站赚钱网站分析设计做的项目的过程
  • 网站建设市区做一个网站要注意什么
  • 门户网站做wordpress 无法连接到ftp服务器
  • 暗网网站有那些网站报名怎么做
  • 自己想学做博客网站吗thinkphp网站建设课程
  • 打不开建设银行网站logo模板
  • 微站官网wordpress单页淘宝客主题
  • 游戏网站开发试验报告广西建设教育网站
  • 工信部个人网站备案建设银行个人网上银行app
  • 网站制作教程下载小程序商城怎么推广引流
  • 中文网站建设合同营销网站开发系统
  • 模板网站源码wordpress缺少临时文件夹
  • 驻马店河南网站建设房产网站关键词优化
  • 医疗 企业 网站建设江门站官网
  • 黄冈网站开发建设电子商务网站论文
  • 蚌埠哪里做网站wordpress权限ip
  • 郑州中色十二冶金建设有限公司网站常州网站推广招聘
  • 我想做教育网站那里做无锡游戏网站建设公司
  • 成都装修建材网站建设宁波专业网站建设怎么做
  • 北海网站建设网怎么推广自己的网站