- 时间:2022-08-30 00:52 编辑: 来源: 阅读:306
- 扫一扫,手机访问
摘要:面试问题04.08。第一个共同祖先
[导航网站源码]
呜呜,看了半天,终于把这个问题的统一过程理顺了。 不知道大家有没有发现,刷leetcode的时候缺少main入口会导致你写main方法的能力下降,所以做题的时候一定要在自己的环境里重新打一遍。啊啊!事不宜迟,我们来看题目!设计并实现一个算法来找出二叉树中两个节点的第一个共同祖先。 其余节点不得存储在另一个数据结构中。 注意:这不一定是二叉查找树。 例如,给定下面的二叉树:root = [3,5,1,6,2,0,8,null,null,7,4]例1: Input: root = [3,5,1,6,2,0,8,null,null,7,4],p = 例:输入:root = [3,5,1,6,2,0,8,null,null,7,4],p = 5,q = 4输出:5解释:节点5和节点4最近的共同祖先是节点5。 因为根据定义,最近的共同祖先节点可以是节点本身 注意:所有节点的值都是唯一的。 p和Q是不同的节点,并且都存在于给定的二叉树中。 关于二叉树的实现及其Java代码,可以参考下面的链接二叉树和用Java实现二叉树。下面给出了这个问题的解决方案:OE的公共类{ static treenodedefine altpublic TreeNodelowestCommonAncestor(TreeNode root,TreeNode p,TreeNode q){ TreeNode ISS = new TreeNode(3);if(root = = null | | ISS . issametree(root,p) || iss.isSameTree(root,q))返回root;TreeNode left = lowestCommonAncestor(root . left,p,q);TreeNode right = lowestCommonAncestor(root . right,p,q);finalt =左!=null?对!=null?根:左:右;;返回finalt} public static void main(String[]args){ Integer[]root = { 3,5,1,6,2,0,8,null,null,7,4 };integer[]p = { 4 };integer[]q = { 6 };TreeNode treen =新的TreeNode(3);TreeNode roott = treen . create Bt(root,0);TreeNode pp = treen.createBT(p,0);TreeNode qq = treen.createBT(q,0);ofoe of LC = new ofoe();oflc . lowestcommonancestor(roott,pp,QQ);system . out . println(finalt . val);}}