将有序数组转换为二叉搜索树
LeetCode108题,给定一个增序的数组将其转化为二叉搜索树。
思路分析:
1.该题给出的数组是增序,我们只需将其转化为平衡的二叉搜索树即可。
2.每次决定根元素都是数组中的中点,左右子树分别是中点前后的子数组。
3.之后确定左右子树的根节点,也是循环步骤二。
public static TreeNode sortedArrayToBST(int[] nums) {
if (nums.length == 0) {
return null;
}
return createData(nums, 0, nums.length - 1);
}
public static TreeNode createData(int[] nums, int start, int end) {
if (start > end) {
return null;
}
int mid = (start + end) / 2;
TreeNode node = new TreeNode(nums[mid]);
node.left = createData(nums, start, mid-1);
node.right = createData(nums, mid + 1, end);
return node;
}
二叉搜索树的最近公共祖先
LeetCode235题,寻找两个节点最近的一个公共祖先。
思路分析:
因为这是一个搜索树,我们最快的方法就是比较两个节点的值,来遍历这一棵树,一旦在某个节点发生了分歧,就说明该节点是两个节点的最近公共祖先。
if (root == null) {
return null;
}
if (p.val <= root.val && q.val <= root.val) {
return lowestCommonAncestor(root.left, p, q);
} else if (p.val >= root.val && q.val >= root.val) {
return lowestCommonAncestor(root.right, p, q);
}
return root;