给定一个没有重复数的数组。建立一棵最大树

来源:互联网 发布:发票作废 上传数据 编辑:程序博客网 时间:2024/05/17 23:52
思路:先找到最大的数。建立根节点。在递归遍历最大节点的左半部分和右半部分。构造树

 代码1 : 

TreeNode* constructMaximumBinaryTree(vector<int>& nums) {        if(nums.size()==0)            return NULL;        return createTree(nums,0,nums.size()-1);    }    TreeNode* createTree(vector<int>& nums,int start,int end){        if(start>end){            return NULL;        }        int maxN=nums[start];        int i=start;        int j=end;        int index=start;        while(i<=j){            if(nums[i]>maxN){                maxN=nums[i];                index=i;            }            i++;        }        TreeNode* root=new TreeNode(maxN);        root->left=createTree(nums,start,index-1);        root->right=createTree(nums,index+1,end);        return root;            }

思路: 遍历数组。对每个数都新建一个节点。然后与前面的节点对比,如果大于前面的节点。则前面的节点是其左子树。否则新节点是右子树。

代码2 :  非递归

TreeNode* constructMaximumBinaryTree(vector<int>& nums) {        vector<TreeNode*> vec;        int n=nums.size();        for(int i=0;i<n;i++){            TreeNode* p=new TreeNode(nums[i]);            while(vec.size() && vec.back()->val < nums[i]){                p->left=vec.back();                vec.pop_back();            }            if(vec.size()){                vec.back()->right=p;            }            vec.push_back(p);        }        return vec.front();    }



阅读全文
0 0
原创粉丝点击