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

网站建设与网页设计...爱站关键词搜索

网站建设与网页设计...,爱站关键词搜索,wordpress 4.9.1,企业网站建站程序两个节点沿二叉树向上找,找到的第一个公共的节点 例:D和F之间的最低公共节点:B D → B; F → E → B; E和G最低公共节点:A E → B → A; G → C → A; B和F最低公共节点&#xff…

两个节点沿二叉树向上找,找到的第一个公共的节点 

例:D和F之间的最低公共节点:B

       D → B; F → E → B;

       E和G最低公共节点:A

       E → B →  A; G → C →  A;

       B和F最低公共节点:B

       B ; F → E → B;


方法一:

从两个节点开始,生成两条有向无环链表

优化:生成链表主要是为了寻找node1节点的所有父节点,但是对于其中的节点关系没有要求,所以我们可以不使用链表结构,而使用HashSet结构

package binarytree;import java.util.HashMap;
import java.util.HashSet;public class LowestCommonAncester {public static class Node {public int value;public Node left;public Node right;public Node(int data) {this.value = data;}}public Node lowestCommonAncester(Node head, Node node01, Node node02) {if (head == null) {return null;}HashMap<Node, Node> fatherMap = new HashMap<>();//记录每个节点的父节点,前为子节点,后为父节点fatherMap.put(head, null);//设置头节点的父节点为nullHashSet<Node> set = new HashSet<>();//记录了node01的所有父节点,HashSet集合不保证数据的有序性set.add(node01);//先把node01放进去while (node01 != head) {set.add(fatherMap.get(node01));//把父节点放入set集合中node01 = fatherMap.get(node01);//将node01修改为它的父节点,向上查询}while (node02 != head) {if (set.contains(node02)) {//set集合中存在node02节点向上查询的第一个公共节点即为最低公共节点return node02;}node02 = fatherMap.get(node02);//将node02修改为它的父节点,向上查询}//在node01到头节点的set集合中都没有找到两个节点的公共节点,那么它们一定有个公共节点为头节点return head;}//此方法记录fatherMap集合的数据。即每个节点的父节点public void process(Node node, HashMap<Node, Node> fatherMap) {fatherMap.put(node.left, node);//左孩子的父节点是他自己fatherMap.put(node.right, node);//右孩子的父节点是他自己process(node.left, fatherMap);process(node.right, fatherMap);}
}

方法二:

找到的最低公共节点有三种情况:

        node1是两节点的最低公共节点(node1是node2的其中一个父节点)

        node2是两节点的最低公共节点(node2是node1的其中一个父节点)

        node1和node2无关,两个节点向上查询找到最低公共节点

对于情况一和情况二:当一个节点左右节点一个返回值一个返回空的时候,选择返回值

 

对于情况三:当一个节点左右都不为空的时候,返回它自己

    public Node lowestAncestor(Node node, Node node1, Node node2) {if (node == null || node == node1 || node == node2) {//没有节点或遇到了node1或node2,直接返回当前节点return node;//二叉树最底层的返回,遍历到最底层,或者遇到node1和node2节点}Node left = lowestCommonAncester(node.left, node1, node2);//从左侧返回的node或者nullNode right = lowestCommonAncester(node.right, node1, node2);//从右侧返回的node或者nullif (left != null && right != null) {//当前节点左右返回的值都不为空return node;}return left != null ? left : right;//如果left返回的值为null,就返回右侧right返回的值;如果不是null,返回left的值}

http://www.yayakq.cn/news/132485/

相关文章:

  • 怎么样创建网站陕建上海公司官网
  • 优秀网站设计网站宁波怎么建网站模板
  • 网站建设费用IP牛商网做的包装盒网站
  • 外贸网站建设 翻译俄罗斯搜索引擎yandex推广入口
  • 石家庄建站模板源码p2p网站开发思路方案
  • 高端网站建设好的公司眼镜东莞网站建设
  • 怎么下载自己做的网站北京网页制作公司电话
  • 太原做网站的公司网站建设怎么做企业推广
  • 南宁网站建设服务商企业设计网站公司哪家好
  • 网站代备案多少钱网易企业邮箱登入路口
  • 客户为什么要做网站非物质文化遗产网站怎么做
  • 网站图片广告代码枣阳做网站
  • cms优秀网站设计案例新闻最近新闻10条
  • 网站群管理平台方案窝窝网
  • 做网站需要注册公司吗专升本可以报考哪些大学
  • 网站设计怎么做阿里网 网站备案流程
  • 上海产品网站建设爱写作网站
  • 全屏网站源码江西网站建设公司哪家好
  • 国际商务网站济南企业建站系统
  • 做游戏ppt下载网站有哪些内容网站建设需要哪些工具
  • 网站特效 素材个人商城
  • 网站做小学一年二班作业怎么做wp_head wordpress
  • 办文明网站做文明网民活动方案租用服务器网站
  • 公司网站后台密码怎样做购物网站
  • 网站建设网页链接能做外链的产品网站
  • 做房地产要自己开网站wordpress首页全屏插件
  • 页面好看的网站公司国外网站建设
  • 周到的网站建设网站开发公司需要那些硬件设备
  • 网站关键词有哪些软件项目交易网
  • 如何做网站建设网页编辑和发布流程不包括以下哪个选项