首页 > 编程语言 >代码随想录算法训练营第十七天| 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的搜索 , 98.验证二叉搜索树

代码随想录算法训练营第十七天| 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的搜索 , 98.验证二叉搜索树

时间:2024-11-09 16:41:10浏览次数:1  
标签:right return val 二叉 搜索 二叉树 TreeNode root left

654.最大二叉树

文章链接:https://programmercarl.com/0654.最大二叉树.html
题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/

class Solution {
public:
    TreeNode* traversal(vector<int>& nums,int left,int right){
        if(left>=right) return NULL;
        int maxValIndex=left;
        for(int i=left;i<right;i++){
            if(nums[i]>nums[maxValIndex]) maxValIndex=i;
        }
        TreeNode* root=new TreeNode(nums[maxValIndex]);
        root->left=traversal(nums,left,maxValIndex);
        root->right=traversal(nums,maxValIndex+1,right);
        return root;

    }
    TreeNode* constructMaximumBinaryTree(vector<int>& nums) {
        return traversal(nums,0,nums.size());

    }
};

617.合并二叉树

文章链接:https://programmercarl.com/0617.合并二叉树.html
题目链接:https://leetcode.cn/problems/merge-two-binary-trees/description/

class Solution {
public:
    TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {
        if(root1==NULL) return root2;    //此时root2为空也没有关系,那就是空节点
        if(root2==NULL) return root1;
        root1->val=root1->val+root2->val;  //两个都不为空
        root1->left=mergeTrees(root1->left,root2->left);
        root1->right=mergeTrees(root1->right,root2->right);
        return root1;
    }
};

700.二叉搜索树中的搜索

文章链接:https://programmercarl.com/0700.二叉搜索树中的搜索.html
题目链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/description/

//递归法
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        if(root==NULL||root->val==val) return root;
        if(val<root->val) return searchBST(root->left,val);
        else return searchBST(root->right,val);
    }
};
//迭代法
class Solution {
public:
    TreeNode* searchBST(TreeNode* root, int val) {
        while(root!=NULL){
            if(val<root->val) root=root->left;
            else if(val>root->val) root=root->right;
            else return root;
        }
        return root;
    }
};

98.验证二叉搜索树

文章链接:https://programmercarl.com/0098.验证二叉搜索树.html
题目链接:https://leetcode.cn/problems/validate-binary-search-tree/description/

错误写法:(原因:对于一个有效的 BST,不仅需要满足左子节点的值小于根节点的值,右子节点的值大于根节点的值,还必须确保左子树所有节点的值都小于根节点,右子树所有节点的值都大于根节点。因此,仅比较直接的左、右节点是不够的。)

//以下为错误的代码!!!
class Solution {
public:
    bool isValidBST(TreeNode* root) {
        if(root==NULL) return true;
        bool isValidLeft=true;  //左子节点为空
        if(root->left){
            if(root->left->val<root->val) isValidLeft=isValidBST(root->left);
            else return false;
        }
        bool isValidRight=true;  //右子节点为空
        if(root->right){
            if(root->right->val<root->val) isValidRight=isValidBST(root->right);
            else return false;
        }
        return isValidLeft&&isValidRight;
    }
};

思路:二叉搜索树可以看它的中序序列,是从小到大的顺序!!

class Solution {
public:
    TreeNode* pre=NULL;
    bool isValidBST(TreeNode* root) {
        //中序遍历并逐渐与前一个值进行比较即可
        if(root==NULL) return true;
        //左
        bool left=isValidBST(root->left);
        //中
        if(pre!=NULL&&pre->val>=root->val) return false;
        pre=root;
        //右
        bool right=isValidBST(root->right);
        return left&&right;
    }
};

标签:right,return,val,二叉,搜索,二叉树,TreeNode,root,left
From: https://www.cnblogs.com/VickyWu/p/18536048

相关文章

  • 二叉搜索树
    一.二叉搜索树介绍    二叉搜索树又叫做二叉排序树,它拥有一些特殊的性质。    1.若它的左子树不为空,那么左子树上面的节点全部小于根节点。    2.若它的右子树不为空,那么右子树上面的节点全部大于根节点。    3.它的左右子树也全部都是二......
  • C语言数据结构之二叉树(BINARY TREE)的多种数据类型存贮
    C语言数据结构之二叉树(BINARYTREE)的多种数据类型存贮用无类型指针(void*)来做为基本数据类型来存贮数据,将其他数据类型强制转化为无类型指针,从而达到目标!!!输出函数指针BTFunc比较函数指针BTCmpFunc返回值为整型值1、-1、0,表示大于、小于、相等代码如下:/*filename:btr......
  • 二叉树常用代码合集【C++版】(详细注释)
    二叉树常用代码合集【C++版】(详细注释)关键的地方有详细的注释。如果需要更详细的注释,可以丢给大模型再注释一遍。#include<iostream>#include<memory>#include<string>#definemv(x)std::move(x)#definecoutln(x)cout<<x<<endlusingnamespacestd;......
  • C++算法练习-day38——106.从中序和后序遍历序列构造二叉树
    题目来源:.-力扣(LeetCode)题目思路分析题目要求根据一棵二叉树的中序遍历(inorder)和后序遍历(postorder)结果重建这棵二叉树。中序遍历的特点是左子树->根节点->右子树,而后序遍历的特点是左子树->右子树->根节点。利用这两个遍历的特点,我们可以递归地重建整棵树。后序......
  • 网站显示在 Google 搜索结果中
    Google会自动查找可添加到Google索引中的网站;通常您无需执行任何操作,只需将网站发布到网络上即可。但是,网站有时会被遗漏。检查您的网站是否已收录到Google中,并了解如何让您的内容在Google搜索中更易于被发现。让网页出现在Google搜索结果中的基本核对清单首先,您需要问......
  • 关于 Google 搜索运作方式的深度指南
    Google搜索是一款全自动搜索引擎,会使用名为“网页抓取工具”的软件定期探索网络,找出可添加到Google索引中的网页。实际上,Google搜索结果中收录的大多数网页都不是手动提交的,而是我们的网页抓取工具在探索网络时找到并自动添加的。本文档从网站的角度介绍了Google搜索运作方......
  • 7-8 数据结构实验二 二叉树的遍历
    以二叉链表作存储结构,建立一棵二叉树。输出该二叉树的先序、中序、后序遍历序列,求出该二叉树的深度,并统计其叶子结点数。二叉链表的类型描述:typedefcharElemType;typedefstructBiNode{ElemTypedata;structBiNode*lchild,*rchild;}BiNode,*BiTree;......
  • 二叉搜索树、AVL(平衡二叉查找树)、红黑树
    一、二叉搜索树二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树:若它的左子树不为空,则左子树上所有节点的值都小于根节点的值若它的右子树不为空,则右子树上所有节点的值都大于根节点的值它的左右子树也分别为二叉搜索树1.二叉搜索树的操作1.二......
  • JS数据结构之树和二叉树
    一、树树(Tree)是一种非常常见的数据结构,它模拟了自然界中树的结构,由节点(或称为顶点)组成,并且具有层次化的组织形式。树结构在计算机科学中广泛应用,例如在组织数据、管理信息层次以及算法设计中。1.基本概念节点(Node)根节点(Root):树的最顶端节点,没有父节点。内部节点(InternalNod......
  • Leecode热题100-104.二叉树中的最大路径和
    二叉树中的 路径 被定义为一条节点序列,序列中每对相邻节点之间都存在一条边。同一个节点在一条路径序列中 至多出现一次 。该路径 至少包含一个 节点,且不一定经过根节点。路径和 是路径中各节点值的总和。给你一个二叉树的根节点 root ,返回其 最大路径和 。示例......