数据结构与算法学习记录-二叉搜索树的最小绝度差

35 阅读1分钟

二叉搜索树的最小绝度差

​ 特点,双指针在二叉树中的应用

​ 需注意树为二叉搜索树,这是很特殊的,因为其中序遍历结果,恰好为所有值顺序结果,由于是顺序,因而顺序结果的俩相邻数,他们必然是挨得最近的俩值,在值的大小上;因而只需要检查中序遍历结果,哪两个相邻值的差值最小即可,则为最终结果

​ 定义一个外部指针,在每次遍历完当前节点,则将pre移动,指向当所遍历的节点,如此来不断更新pre,双指针的另一指针即为cur,即指向当前所遍历的节点的指针

/**

  • 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 { int result = Integer.MAX_VALUE; TreeNode pre = null;

    public int getMinimumDifference(TreeNode root) { findValue(root);

     return result;
    

    }

    private void findValue(TreeNode cur) { if (cur == null) { return; }

     /*
     因为前面有语句会判定到cur为null则退出寻找,因而此处
     不必再判定判定cur.left是否为null;中序遍历的“左”遍历
      */
     findValue(cur.left);
    
     //中序遍历的“根”遍历
     if (pre != null) {
         int temp = Math.abs(cur.val - pre.val);
         if (temp < result) {
             result = temp;
         }
     }
     pre = cur;
    
     //中序遍历的“右”遍历
     findValue(cur.right);
    

    } }

本文由博客一文多发平台 OpenWrite 发布!