代码随想录算法训练营第十八天| 530.二叉搜索树的最小绝对差 、 501.二叉搜索树中的众数 、236. 二叉树的最近公共祖先

34 阅读1分钟

530.二叉搜索树的最小绝对差

相关链接:题目链接文章讲解 视频讲解

解题思路

二叉搜索树中序遍历的话,正好是排序好的数字

代码实现

var getMinimumDifference = function(root) {
    var prev = null;
    var minDiff =Infinity;
    var inOrderTravel = function(root){
        if(!root) return;
        inOrderTravel(root.left);
        if(prev!==null){
            minDiff = Math.min(minDiff,Math.abs(root.val -prev));
        }
        prev = root.val;

       inOrderTravel(root.right);
    }
    inOrderTravel(root);
    return minDiff;
};

501.二叉搜索树中的众数

相关链接:题目链接文章讲解 视频讲解

解题思路

代码实现

var findMode = function(root) {
    var map =new Map();;
    var inOrderTravel = function(root){
        if(!root){return;}
        inOrderTravel(root.left);
        if(!map.has(root.val)){
            map.set(root.val,1)
        }else{
            var num = map.get(root.val);
            map.set(root.val,num + 1);
        }
        inOrderTravel(root.right);
    }
    inOrderTravel(root);
    var max,zs=[];
    map.forEach((value,key)=>{
        if(!max){
            max = value;
        }
        if(value>max){
            max = value;
        }
    })

    map.forEach((value,key)=>{
        if(value ===max){
            zs.push(key);
        }
    })
    return zs;
};

236. 二叉树的最近公共祖先

相关链接:题目链接文章讲解 视频讲解

解题思路

后序遍历(回溯)

代码实现

var lowestCommonAncestor = function(root, p, q) {
    var postOrder= function(root,p,q){
        if(!root) return root;
        if(root ===p || root===q) return root;
        var left = postOrder(root.left,p,q);
        var right = postOrder(root.right,p,q);
        if(left && right) return root;
        if(!left && right) return right;
        if(left && !right) return left;
        if(!left && !right) return null;
    }
    var res = postOrder(root,p,q);
    return res;

};