二叉搜索树的最小绝度差
特点,双指针在二叉树中的应用
需注意树为二叉搜索树,这是很特殊的,因为其中序遍历结果,恰好为所有值顺序结果,由于是顺序,因而顺序结果的俩相邻数,他们必然是挨得最近的俩值,在值的大小上;因而只需要检查中序遍历结果,哪两个相邻值的差值最小即可,则为最终结果
定义一个外部指针,在每次遍历完当前节点,则将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 发布!