第一章:手把手带你刷二叉树-第二期

labuladong 手把手带你刷二叉树(第二期)

654. 最大二叉树

递归结束条件:nums中没有元素
明确函数的定义(但不跳进递归去):找到最大值及最大值的索引,并根据索引将其分成左右两个子nums集合
左右子树递归调用该函数

# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution(object):
    def constructMaximumBinaryTree(self, nums):
        """
        :type nums: List[int]
        :rtype: TreeNode
        """
        if not nums: return None
        max_val=max(nums)
        max_index=nums.index(max_val)
        root=TreeNode(max_val)
        root.left=self.constructMaximumBinaryTree(nums[:max_index])
        root.right=self.constructMaximumBinaryTree(nums[max_index+1:])
        return root
//#include <bits/stdc++.h>
//using namespace std;
//
////Definition for a binary tree node.
//struct TreeNode {
//    int val;
//    TreeNode *left;
//    TreeNode *right;
//    TreeNode() : val(0), left(nullptr), right(nullptr) {}
//    TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
//    TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}
//};

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        if (nums.size() == 0) return nullptr;
//        最大值及其对应的索引
        vector<int>::iterator idx=max_element(nums.begin(), nums.end()); // 或者:auto idx=max_element(nums);
        int maxVal=*idx;
//        构建新的节点
        TreeNode* root=new TreeNode (maxVal);
//        递归调用最大值两边的左右两个子数组
        vector<int>l(nums.begin(),idx);
        vector<int>r(idx+1,nums.end());
        root->left= constructMaximumBinaryTree(l);
        root->right= constructMaximumBinaryTree(r);
        return root;
    }
};

105. 从前序与中序遍历序列构造二叉树

题解见:第零章:学习算法和刷题的框架思维


   转载规则


《第一章:手把手带你刷二叉树-第二期》 M 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
1029-两地调度 1029-两地调度
1029. 两地调度 按照每个人去A、B两地的路费差进行排序,排好序后,前半部分人去A地,后半部分人去B地 以 [[10,20],[30,200],[400,50],[30,20]] 为例,两地的差分别为[-10,-170,350,10]
2021-04-15
下一篇 
华为2021笔试记录 华为2021笔试记录
重复一次的最长子串在一个字符串中找到最多重复一次的最长子串,并返回子串长度(AC100%) 输入:abcabcbb输出:6说明:abcabc是最多重复一次的最长子串 该题是3. 无重复字符的最长子串的变体,利用滑动窗口思想,不断更新左
2021-03-05
  目录