public int lowestCommonAncestor(TreeNode root, int o1, int o2)/记录遍历到的每个节点的父节点/ { Map<Integer, Integer> parent = new HashMap<>(); Queue<TreeNode> queue = new LinkedList<>(); parent.put(root.val, Integer.MIN_VALUE);//给根节点默认一个值 queue.add(root); //直到两个节点都找到为止 while (!parent.containsKey(o1) || !parent.containsKey(o2)) { TreeNode node = queue.poll();//出队 if (node.left != null)//左子节点不为空,记录下他的父节点 { parent.put(node.left.val, node.val); /左子节点不为空,加入队列/ queue.add(node.left); } //右节点 if (node.right != null) { parent.put(node.right.val, node.val); queue.add(node.right); } } Set<Integer> ancestors = new HashSet<>(); //记录下o1和他的祖先节点,从o1节点开始一直到根节点。 while (parent.containsKey(o1)) { ancestors.add(o1); o1 = parent.get(o1); } //查看o1和他的祖先节点是否包含o2节点,如果不包含再看是否包含o2的父节点 while (!ancestors.contains(o2)) o2 = parent.get(o2); return o2;的时间复杂度和空间复杂度是多少
时间: 2023-06-12 08:05:13 浏览: 89
todorex#Coding-Interviews#树中两个节点的最低公共祖先1
时间复杂度和空间复杂度都是 O(n),其中 n 为树中节点的数量。
时间复杂度分析:最坏情况下,需要遍历整棵树才能找到两个节点,因此时间复杂度为 O(n)。
空间复杂度分析:需要一个 HashMap 来记录每个节点的父节点,因此空间复杂度为 O(n)。同时需要一个队列来辅助遍历,最大情况下队列中会存储一层所有节点,因此空间复杂度也为 O(n)。两者相加得到总的空间复杂度为 O(n)。
阅读全文