代码随想录算法训练营Day17 | Leetcode 654 最大二叉树 Leetcode 617 合并二叉树 Leetcode 700 二叉搜索树中的搜索 Leetcode 98 验证二叉搜索树

前言

今天还是二叉树递归,相比于前两天可以写出部分代码了,有的题甚至有思路可以自己实现。

Leetcode 654 最大二叉树

题目链接:654. 最大二叉树 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:这道题目类似于一直中后序创造二叉树,终止条件是当前数组只有一个数了,证明左右节点都为空。需要先找到数组中的最大值,然后划分左边和右边,然后传入左数组和右数组递归。

代码:

class Solution {
public:
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
    TreeNode* root=new TreeNode(0);
    if(nums.size()==1)//终止条件,传入数组大小为1
    {
     root->val=nums[0];
     return root;
    }
    int index=0;
    int max=-1;
    for(int i=0;i<nums.size();i++)//找到当前数组最大值
    {
        if(nums[i]>max)
        {
            index=i;
            max=nums[i];
        }
    }
    root->val=max;//创造节点
    if(index>0)//起码得有一个元素
    {
    vector<int> lnum(nums.begin(),nums.begin()+index);//划分左右数组
    root->left=constructMaximumBinaryTree(lnum);
    }
    if(index<nums.size()-1)//起码得有一个元素
    {
    vector<int> rnum(nums.begin()+index+1,nums.end());
    root->right=constructMaximumBinaryTree(rnum);
    }
    return root;
    }
};

 Leetcode 617 合并二叉树

题目链接:617. 合并二叉树 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:终止条件为其中一个树的左节点为空或者右节点为空,都不为空则相加,然后传入左右孩子。

代码:

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
    TreeNode* root=new TreeNode(0);
    if(root1==NULL)//终止条件
    {
        root=root2;
        return root;
    }
    if(root2==NULL)
    {
        root=root1;
        return root;
    }
    root->val=root1->val+root2->val;//相加
    root->left=mergeTrees(root1->left, root2->left);
    root->right=mergeTrees(root1->right, root2->right);
    return root;
    }
};

Leetcode 700 二叉搜索树中的搜索

题目链接:700. 二叉搜索树中的搜索 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:二叉搜索树是一种数据结构,根节点比左孩子大,比右孩子小,所以搜索的时候如果大于目标值就去左孩子,小于目标值就去右孩子。

代码:

class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
    if(root==NULL||root->val==val)
    {
        return root;
    }
    if(root->val>val)
    {
        return searchBST(root->left, val);
    }
    if(root->val<val)
    {
        return searchBST(root->right, val);
    }
    return NULL;
    }
};

Leetcode 98 验证二叉搜索树

题目链接:98. 验证二叉搜索树 - 力扣(LeetCode)

代码随想录题解:代码随想录 (programmercarl.com)

思路:中序遍历二叉搜索树的结果是有序的,所以我们需要比较当前所遍历的值是否比上一次大。

代码:

class Solution {
public:
    long long maxVal = LONG_MIN;
    bool isValidBST(TreeNode* root) {
    if(root==NULL)
    {
        return true;
    }
    bool left=isValidBST(root->left);//左
    if (maxVal < root->val) maxVal = root->val;//中
        else return false;
        bool right = isValidBST(root->right);//右

        return left && right;
    }
};

总结

这几天状态不是很好,学习效率比较低,及时调整

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值