LeetCode打卡-108-将有序数组转换为二叉搜索树

    技术2023-11-06  105

    一、题目回顾 二、技能点  1.二叉搜索树  2.递归算法的应用

    三、实现思路和代码  本题的实现基于平衡二叉搜索树的知识,在构建平衡二叉搜索树的时候对高度差的问题进行处理即可。  基于本题的输入数组为已经排序好的升序数组,可以直接按照示例的思路,以中序遍历-构造平衡二叉搜索树的方式完成。要保证各个节点子树高度差不超过1,即在数组大小为奇数保证二叉树以根节点为中心左右对称,在数组大小为偶数时保证二叉树以根节点为中心左右节点相差1。在编写代码的时候可以直接规定根节点的下标为[nums.size()/2],在递归中以[(left+right+1)/2]的形式表达,以此规定所有父节点的选取。cpp版代码如下:

    /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */ class Solution { public: TreeNode* sortedArrayToBST(vector<int>& nums) { return Bulid_Tree(nums,0,nums.size()-1); } TreeNode* Bulid_Tree(vector<int>& nums,int left,int right){ int mid=(left+right+1)/2; if(left>right) return nullptr; TreeNode* newTree=new TreeNode(nums[mid]); newTree->left=Bulid_Tree(nums,left,mid-1); newTree->right=Bulid_Tree(nums,mid+1,right); return newTree; } };

    代码块中的注释代码为平台模板给出的平衡二叉树结构定义,val为树的根节点,分别定义left和right为左右两个子树,初始值赋为null。

    Processed: 0.010, SQL: 9