• 代码随想录算法训练营第20天|二叉树


    654. 最大二叉树
    思路和由中后序列构建树的思路是一样的,只不过这里不是通过后序的最后一个数来进行分割,而是通过找最大值进行分割左右子树
    迭代找出左子树和右子树的的边界,返回当前节点就行了
    具体代码后续补

    617. 合并二叉树
    这里的return node不能到最后才去return,一定在某一个条件里面马上return了

    /**
     * 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) {
        // console.log(root1,root2);
        // console.log(root1 === null)
        // return;
        //两个都为空
        if(root1 == null && root2 == null) return null;
        //root2为空
        let node = new TreeNode();
        if(root1 != null && root2 == null){
            let node = new TreeNode(root1.val);
            node.left = mergeTrees(root1.left, null);
            node.right = mergeTrees(root1.right, null);
            return node;
        }else if(root1 == null && root2 != null){
            let node = new TreeNode(root2.val);
            node.left = mergeTrees(null, root2.left);
            node.right = mergeTrees(null, root2.right);
            return node;
        }else{
            let node = new TreeNode(root1.val + root2.val);
            node.left = mergeTrees(root1.left, root2.left);
            node.right = mergeTrees(root1.right, root2.right);
            return node;
        }
    };
    '
    运行

    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) return null;
        if(val > root.val){
            return searchBST(root.right, val);
        }else if(val < root.val){
            return searchBST(root.left, val);
        }else return root;
    
    };
    '
    运行

    98. 验证二叉搜索树
    这道题有陷阱的,子树是BST,不代表这个树一定是BST
    要清楚的特性是对于BST来说,起中序遍历的数组一定是一个升序数组

    /**
     * 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 inorder = [];
        inOrder(root, inorder);
        for(let i = 1; i < inorder.length; i++){
            if(inorder[i - 1] >= inorder[i]) return false;
        }
        return true;
    
    
    };
    
    function inOrder(root, inorder){
        if(!root) return;
        inOrder(root.left, inorder);
        inorder.push(root.val);
        inOrder(root.right, inorder);
    }
    
    
    '
    运行
  • 相关阅读:
    03-Swing程序设计
    自古以来,代理程序都是兵家折戟之地
    【React】React入门
    卷积神经网络提取的图像特征包括哪些
    JAVA:实现是否为Prime素数算法(附完整源码)
    如何更灵活的处理 CloudKit 从云端同步到本地的 CoreData 托管对象
    [23年毕业设计源码]精品基于Python实现的仓库库存管理系统[2023届新项目源码]
    [2023-09-12]Oracle备库查询报ORA-01187
    PMP每日一练 | 考试不迷路-11.19(包含敏捷+多选)
    《HarmonyOS开发 – OpenHarmony开发笔记(基于小型系统)》第6章 环境监测系统
  • 原文地址:https://blog.csdn.net/shifff/article/details/139456921