构建二叉树

来源:互联网 发布:蔡珍妮淘宝退货地址 编辑:程序博客网 时间:2024/06/07 16:39
/*1.一直一个排序数组,求转换为一个平衡二叉查找树*//** * 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 *CreateTree(vector<int> &nums)                    {                        if(nums.empty() == true)                        {                            return NULL;                        }                        vector<int> nums_left;                        vector<int> nums_right;                        int mid = (0+nums.size())/2; //vector的中间数字为根                        int mid_value = nums[mid];                        TreeNode *root = new TreeNode(mid_value);                        for(int i=0;i<mid;i++)                        {                            nums_left.push_back(nums[i]);   //左边的数字                        }                        for(int i=mid+1;i<nums.size();i++)                        {                            nums_right.push_back(nums[i]);   //右边的数字                        }                        root->left = CreateTree(nums_left);   //创建左边的跟                        root->right = CreateTree(nums_right);   //创建右边的根                        return root;   //返回当前的根节点                    }                    TreeNode* sortedArrayToBST(vector<int>& nums) {                        if(nums.empty() == true)                        {                            return NULL;                        }                        return CreateTree(nums);                                    }            };2.已知二叉树的前序和中序 ->  构建一颗 二叉树/** *  * Definition for binary tree *   * struct TreeNode { *    *     int val; *     *     TreeNode *left; *      *     TreeNode *right; *       *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} *        * }; *         */class Solution {    public:            struct TreeNode* reConstructBinaryTree(vector<int> pre,vector<int> in) {                int pre_size = pre.size();                int in_size = in.size();                if(pre_size == 0 || in_size == 0)                {                    return NULL;                }                vector<int> pre_left,pre_right,in_left,in_right;                int mid,i;                int root_value = pre[0];                TreeNode *temp = new TreeNode(root_value);                for(i=0;i<pre_size;i++)                {                    if(in[i] == root_value)                    {                        mid = i;                        break;                    }                }                for(i=0;i<mid;i++)                {                    pre_left.push_back(pre[i+1]);                    in_left.push_back(in[i]);                }                for(i=mid+1;i<pre_size;i++)                {                    pre_right.push_back(pre[i]);                    in_right.push_back(in[i]);                }                temp->left = reConstructBinaryTree(pre_left, in_left);                temp->right = reConstructBinaryTree(pre_right, in_right);                return temp;                    }};

1 0
原创粉丝点击