首页 > 其他分享 >代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

代码随想录Day20-Leetcode654.最大二叉树,617.合并二叉树,700.二叉搜索树中的搜索,98.验证二叉搜索树

时间:2023-04-04 11:55:09浏览次数:51  
标签:node right return val 二叉 搜索 二叉树 null left

654.最大二叉树

题目链接:https://leetcode.cn/problems/maximum-binary-tree/
基本的模拟思路很快

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {number[]} nums
 * @return {TreeNode}
 */
 //完了,漏了一天没写立刻没思路了,这就是基础的重要性
var constructMaximumBinaryTree = function(nums) {
    return consTree(nums,0,nums.length-1)
};
/**
 * @param {number[]} arr
 * @return {TreeNode}
 */
function consTree(arr,left,right){
    if(left>right){
        return null
    }
    let maxIndex = left;
    let max = arr[left]
    for(let i = left+1; i<= right;i++){
        if(arr[i]>max){
            max = arr[i]
            maxIndex = i
        }
    }
    let node = new ListNode(max)

    node.left = consTree(arr,left,maxIndex-1)
    node.right = consTree(arr,maxIndex+1,right)
    return node
}

617.合并二叉树

题目链接:https://leetcode.cn/problems/merge-two-binary-trees/
很明显的递归写法,不过效率好低,10%不到;

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root1
 * @param {TreeNode} root2
 * @return {TreeNode}
 */
var mergeTrees = function(root1, root2) {
    if(root1==null){
        return root2
    }else if(root2 == null){
        return root1
    }else{
        root1.val = root1.val + root2.val
        root1.left = mergeTrees(root1.left,root2.left)
        root1.right = mergeTrees(root1.right,root2.right)
        return root1
    }
};

另外好像有bfs的方法,暂略

700.二叉搜索树中的搜索

递归

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
    if(root == null){
        return null
    }
    if(val==root.val){
        return root
    }else if (val>root.val){
        return searchBST(root.right,val) 
    }else{
        return searchBST(root.left,val)
    }
};

//又犯了经典错误:递归少参数

迭代
不知道怎么回事,力扣上迭代总比递归慢...

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @param {number} val
 * @return {TreeNode}
 */
var searchBST = function(root, val) {
    let node = root
    while(node!=null){
        if(node.val == val){
            return node
        }else if(val>node.val){
            node = node.right
        }else{
            node = node.left
        }
    }
    return null
};

98.验证二叉搜索树

用了中序遍历然后投影;
不太清楚怎么递归,感觉子问题不好划分,左右子树都有效的情况下,该树仍可能会无效

/**
 * Definition for a binary tree node.
 * function TreeNode(val, left, right) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.left = (left===undefined ? null : left)
 *     this.right = (right===undefined ? null : right)
 * }
 */
/**
 * @param {TreeNode} root
 * @return {boolean}
 */
 //似乎这个结构并不那么递归?左右子树都有效的情况下,可能会无效
 //类似于局部有序不等于整体有序;
 //暴力的方法是,直接中序遍历投影,检查是否有序
var isValidBST = function(root) {
    let arr = []
    inOrder(root,arr)
    for(let i =1;i<arr.length;i++){
        if(arr[i]<=arr[i-1]){
            return false
        }
    }
    return true
};

function inOrder(node,result){
    if(node == null){
        return
    }
    inOrder(node.left,result)
    result.push(node.val)
    inOrder(node.right,result)
}

看了题解后,发现递归需要设置界限,而非根结点和左右孩子结点比大小

标签:node,right,return,val,二叉,搜索,二叉树,null,left
From: https://www.cnblogs.com/herbert118/p/17285942.html

相关文章

  • 树:剑指 Offer 37. 序列化二叉树
    题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列/反序列化算法执行逻辑,你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。提示:输入输出格式与LeetCo......
  • 【NOI OpenJudge1789】算24(搜索)
    problem给定4个数,加减乘除4种运算以及括号把这4个数连接起来得到一个表达式。问是否存在一种方式使得得到的表达式的结果等于24。solution正常的中缀表达式枚举和计算难度都约等于0,麻烦的是括号的枚举和处理。这里只要求满足的结果,所以换一种方式拿掉括号——打乱顺序即可(括号的用......
  • 17搜索二分题目目录
    ProblemA:Canyousolvethisequation?(HDU2199)  点击这里ProblemB:Strangefuction(HDU2899) 点击这里ProblemC:Pie(HDU1969)  点击这里ProblemD:Toxophily(HDU2298)(三分加二分)  点击这里ProblemE:Turnthecorner(HDU2438) 点击这里ProblemF:LineBelt(HDU3400)(三......
  • 最小覆盖子串(哈希表、字符串)、两数之和(数组、哈希表)、二叉树的层序遍历 II(树、广
    最小覆盖子串(哈希表、字符串)给你一个字符串s、一个字符串t。返回s中涵盖t所有字符的最小子串。如果s中不存在涵盖t所有字符的子串,则返回空字符串""。**注意:**如果s中存在这样的子串,我们保证它是唯一的答案。示例1:输入:s="ADOBECODEBANC",t="ABC"输出:"B......
  • magento 高级搜索 brand实例 Magento ‘Shop By Brand’ in SideBar
    高级搜索地址一般为:/catalogsearch/advanced/ Firstcreatethetemplatefileandnameitproductbrand.phtmlplaceitincatalog/productfoldercopythecodegivenbelowandpasteritinyouproductbrand.phtml Note:Pleasechnage‘yourdomain.com’withyoursit......
  • 【数据结构】二叉树先序、中序、后序及层次遍历(C语言版)
    一、图示展示1.先序遍历先序遍历可以想象为,一个小人从一棵二叉树根节点为起点,沿着二叉树外沿,逆时针走一圈回到根节点,路上遇到的元素顺序,就是先序遍历的结果先序遍历结果为:ABDHIEJCFKG动画演示:记住小人沿着外围跑一圈(直到跑回根节点),多看几次动图便能理解2.......
  • 二叉树
    树的结构一棵二叉树又三个部分组成:根节点左子树右子树我们将树的结构定义如下:classTreeNode{public: intval; TreeNode*left; TreeNode*right; intheight; TreeNode(intx):val(x),left(nullptr),right(nullptr),height(1){}; TreeNode():TreeNode(0){};};......
  • 如何使用Java程序实现二叉数
    二叉树是一种重要的数据结构,它由一组节点组成,每个节点可以拥有最多两个子节点。使用Java可以很容易地实现一个二叉树。下面将介绍如何使用Java实现二叉树。二叉树的节点定义一个二叉树的节点可以定义为一个类,其中至少需要包含以下属性:节点值左子节点右子节点在Java中,我们......
  • 利用redis完成自动补全搜索功能(一)
     最近要做一个搜索自动补全的功能(目前只要求做最前匹配),自动补全就是自动提示,类似于搜索引擎,再上面输入一个字符,下面会提示多个关键词供参考,比如你输入nb2字符,会自动提示nba,nba录像,nba直播。能想到的一般有3种解决方案1.利用mysql来做,只能使用like'nb%'......
  • 从二分搜索到二叉搜索树
    引言打算写写树形数据结构:二叉查找树、红黑树、跳表和B树。这些数据结构都是为了解决同一个基本问题:如何快速地对一个大集合执行增删改查。本篇是第一篇,讲讲搜索树的基础:二叉搜索树。基本问题如何在一千万个手机号中快速找到13012345432这个号(以及相关联信息,如号主姓名)?......