将升序数组转化为平衡二叉树

本文详细介绍了如何使用递归方法将整数数组转换为平衡的二叉搜索树(BST)的过程。通过中序遍历数组并构建树节点,实现了数组到BST的高效转换。
public class Solution {
    TreeNode convert(int num[], int l, int r) {
        if (l >= r) return null;
        int m = (l + r) / 2;
        TreeNode left = convert(num, l, m);
        TreeNode root = new TreeNode(num[m]);
        TreeNode right = convert(num, m + 1, r);
        root.left = left;
        root.right = right;
        return root;
    }

    public TreeNode sortedArrayToBST(int[] num) {
        return convert(num, 0, num.length);
    }
}

### 使用数组表示和操作二叉树的方法 #### 数组表示二叉树的基础原理 在计算机科学中,完全二叉树可以通过数组来高效地表示。如果一个二叉树是完全二叉树,则可以利用其特性将其映射到一个连续的线性结构——数组中[^2]。具体来说: - 假设根节点位于索引 `1` 处(通常为了简化计算而不使用索引 `0`),则对于任意节点 `i`: - 左子节点的位置为 `2 * i`。 - 右子节点的位置为 `2 * i + 1`。 - 父节点的位置为 `floor(i / 2)`。 这种关系使得通过简单的算术运算即可访问任何节点及其父节点或子节点[^5]。 #### 示例:将有序数组转化为平衡二叉搜索树 假设有一个升序排列的数组 `[−10, −3, 0, 5, 9]`,目标是将其转换为一棵高度平衡的二叉搜索树 (BST)[^3]。以下是实现这一过程的具体方法: ```python class TreeNode: def __init__(self, val=0, left=None, right=None): self.val = val self.left = left self.right = right def sorted_array_to_bst(nums): if not nums: return None mid = len(nums) // 2 root = TreeNode(nums[mid]) # 中间元素作为当前子树的根节点 root.left = sorted_array_to_bst(nums[:mid]) # 左半部分构建左子树 root.right = sorted_array_to_bst(nums[mid+1:]) # 右半部分构建右子树 return root # 测试代码 nums = [-10, -3, 0, 5, 9] bst_root = sorted_array_to_bst(nums) # 打印函数用于验证结果 def inorder_traversal(root): return inorder_traversal(root.left) + [root.val] + inorder_traversal(root.right) if root else [] print(inorder_traversal(bst_root)) # 输出应与原数组相同 ``` 上述代码展示了如何递归地选取中间值作为根节点,并分别处理左右两部分以形成平衡 BST[^4]。 #### LeetCode 题目中的应用实例 在 LeetCode 的某些题目中也涉及到了数组与二叉树之间的相互转化。例如,在第 94 题 “二叉树的中序遍历” 和第 919 题 “完全二叉树插入器” 中均提到了类似的思路[^1]。这些题目强调了理解完全二叉树特性的必要性以及基于此设计数据结构的能力。 --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值