【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(三)

03-01 1546阅读

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(三)

大家好 我是寸铁👊

【寸铁的刷题笔记】树、dfs、bfs、回溯、递归(三)
(图片来源网络,侵删)

金三银四,树、dfs、bfs、回溯、递归是必考的知识点✨

快跟着寸铁刷起来!面试顺利上岸👋

喜欢的小伙伴可以点点关注 💝


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

考点

DFS、双指针

思路

思路:双指针,一个指针用于记录当前的节点(回溯时的当前节点),一个指针用于记录上一个节点。

不断更新两个指针的值的差值的最小值即可


代码

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    /*
    思路:双指针,一个指针用于记录当前的节点(回溯时的当前节点),一个指针用于记录上一个节点。
    不断更新两个指针的值的差值的最小值即可
    */
    TreeNode pre; //记录上一个遍历的节点
    int result = Integer.MAX_VALUE;
    public int getMinimumDifference(TreeNode root) {
        if(root == null)return 0;
        traversal(root);
        return result;
    }
    public void traversal(TreeNode root){
        if(root == null)return; // 遍历到最后一个节点时,终止,向上回溯
        //左
        traversal(root.left);
        //中
        if(pre != null){
            result = Math.min(result , root.val - pre.val);
        }
        //一开始时,pre为空节点,递归到最后一个节点时,记录当前的节点
        //向上回溯时,pre为上一个节点,root为此时的节点,做差即可
        //当pre不为空时,再进行做差取最小值操作。
        pre = root;
        //右
        traversal(root.right);
    }
}

230. 二叉搜索树中第K小的元素

考点

DFS、回溯

思路

思路:二叉搜索树的中序遍历是有序数组,顺序为:从小到大

左 int res = -1;//记录第K个数的节点值 int cnt = 0; //记录当前遍历到的节点个数 /* 思路:二叉搜索树的中序遍历是有序数组,顺序为:从小到大 左 dfs(root , k); return res;//res全局变量,直接返回res即可。 } public void dfs(TreeNode root, int k){ if(root == null)return;//直接结束 //左子树 dfs(root.left , k); //注意:这里是第k个 从1开始,cnt要先++ if(++cnt == k){ res = root.val; return; //一种理解是函数直接结束 //一种理解是向上回溯,把结果返回给根节点。 } //右子树 dfs(root.right , k); } } /* 思想:根据定义,节点的左子树小于当前节点,节点的右子树大于当前节点 也就是left

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]