Tree
Recursion (递归)
1. 普通二叉树
Lowest Common Ancestor of a Binary Tree
236. Lowest Common Ancestor of a Binary Tree
Given a binary tree, find the lowest common ancestor (LCA) of two given nodes in the tree.
According to the definition of LCA on Wikipedia: “The lowest common ancestor is defined between two nodes p and q as the lowest node in T that has both p and q as descendants (where we allow a node to be a descendant of itself).”
Given the following binary tree: root = [3,5,1,6,2,0,8,null,null,7,4]
Example 1:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 1
Output: 3
Explanation: The LCA of nodes 5 and 1 is 3.
Example 2:
Input: root = [3,5,1,6,2,0,8,null,null,7,4], p = 5, q = 4
Output: 5
Explanation: The LCA of nodes 5 and 4 is 5, since a node can be a descendant of itself according to the LCA definition.
题目大意
给一个二叉树和两个节点,找他们最低的的公共祖先(离两个节点最近的公共父节点)。
解题思路
递归解法:
-
递归变量: 根节点,第一个子节点,第二个子节点
-
处理当前节点:
a. 如果当前节点为null,等于第一个子节点,等于第二个节点,那么返回当前节点。
b. 如果左子树公共节点与右子树公共节点都为null,证明公共节点为根节点即当前节点,否则那个公共节点不为空就返回哪个。 -
处理子节点:从左右子树分别找跟定两个子节点的最低公共节点。
复杂度
TC: O(n) SC: O(lgn)
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null || root == p || root == q) {
return root;
}
TreeNode left = lowestCommonAncestor(root.left, p, q);
TreeNode right = lowestCommonAncestor(root.right, p, q);
if (left != null && right != null) {
return root;
}
return left != null ? left : right;
}
相似题目
116. Populating Next Right Pointers in Each Node
814. Binary Tree Pruning
701. Insert into a Binary Search Tree
111. Minimum Depth of Binary Tree
110. Balanced Binary Tree
572. Subtree of Another Tree
101. Symmetric Tree
563. Binary Tree Tilt
100. Same Tree
226. Invert Binary Tree
617. Merge Two Binary Trees
Boundary of Binary Tree
545. Boundary of Binary Tree
Given a binary tree, return the values of its boundary in anti-clockwise direction starting from root. Boundary includes left boundary, leaves, and right boundary in order without duplicate nodes.
Left boundary is defined as the path from root to the left-most node. Right boundary is defined as the path from root to the right-most node. If the root doesn’t have left subtree or right subtree, then the root itself is left boundary or right boundary. Note this definition