农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。
区块链毕设网qklbishe.com为您提供问题的解答
农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。
给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。
非递归做法,使用Map集合保存父子节点,然后分别遍历出两个值p,q的路径。
因为路径是从下到上,所以获得p和q路径集合,以后从任一集合第一个节点遍历即可找出公共节点
import java.util.*; /* * public class TreeNode { * int val = 0; * TreeNode left = null; * TreeNode right = null; * public TreeNode(int val) { * this.val = val; * } * } */ public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param root TreeNode类 * @param p int整型 * @param q int整型 * @return int整型 */ public int lowestCommonAncestor (TreeNode root, int p, int q) { // write code here Queue<TreeNode> queue=new LinkedList<>(); queue.add(root); //<子节点,父节点> TreeMap<Integer,Integer> map=new TreeMap<>(); //遍历获取父子节点的map集合 map.put(root.val,Integer.MAX_VALUE); while(!queue.isEmpty()){ TreeNode node=queue.poll(); if(node.left!=null){ map.put(node.left.val,node.val); queue.add(node.left); } if(node.right!=null){ map.put(node.right.val,node.val); queue.add(node.right); } } //获取P节点的路径从下到上 ArrayList<Integer> pathP=new ArrayList<>(); pathP.add(p); int node=p; while(true){ node=map.get(node); if(node==Integer.MAX_VALUE){ break; } pathP.add(node); } //获取Q节点的路径从下到上 ArrayList<Integer> pathQ=new ArrayList<>(); pathQ.add(q); node=q; while(true){ node=map.get(node); if(node==Integer.MAX_VALUE){ break; } pathQ.add(node); } //进行对比,只要节点相等就是最近公共祖先 for(int i=0;i<pathP.size();i++){ if(pathQ.contains(pathP.get(i))){ return pathP.get(i); } } return -1; } }
21:45
以上就是关于问题农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。的答案
欢迎关注区块链毕设网-
专业区块链毕业设计成品源码,定制。
区块链NFT链游项目方科学家脚本开发培训
从业7年-专注一级市场
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。
微信:btc9767
TELEGRAM :https://t.me/btcok9
具体资料介绍
web3的一级市场千万收益的逻辑
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。
进群点我
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。
qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 农场里有许多牛,每头牛都有一个编号,范围在0到10^5之间。为了方便管理,农场主将牛的编号按照族谱关系排列成一棵二叉树。现在农场主想知道,给定两头牛的编号,他们的最近公共祖先是谁。 给定一棵表示牛群族谱的二叉树的根节点 root,以及两个整数 p 和 q,分别代表两头牛的编号。返回这两头牛的最近公共祖先的编号。