标签:有序 递归遍历 minimum traversal int 链接 pre min null
1.利用中序遍历把树转为有序数组,然后在数组上求两个相邻数字的最小值。
2.同样采用中序遍历,可以直接在递归遍历的过程中记录相邻数字的最小值。
3.因为题目给的树是二叉排序树,所以中序遍历的结果一定是一个有序数组,所以两个数的差的最小值一定出现在中序遍历中相邻的两个节点,所以可以借鉴链表记录前驱节点的方式记录中序遍历中的当前节点以及前驱节点,两者作差比较即可。
class Solution {
LinkedList<Integer> ans = new LinkedList<>();
void InOrderTraversal(TreeNode root){
if(root != null){
InOrderTraversal(root.left);
ans.add(root.val);
InOrderTraversal(root.right);
}
}
public int getMinimumDifference(TreeNode root) {
InOrderTraversal(root);
int minn = 9999999;
for(int i = ans.size()-1;i > 0; i--){
if(ans.get(i)-ans.get(i-1) < minn) minn = ans.get(i)-ans.get(i-1);
}
return minn;
}
}
class Solution {
LinkedList<Integer> ans = new LinkedList<>();
int minn = 9999999;
int temp = 0;
void InOrderTraversal(TreeNode root){
if(root != null){
InOrderTraversal(root.left);
temp++;
ans.add(root.val);
if(temp>=2){
if(ans.get(temp-1)-ans.get(temp-2)<minn) minn = ans.get(temp-1)-ans.get(temp-2);
}
InOrderTraversal(root.right);
}
}
public int getMinimumDifference(TreeNode root) {
InOrderTraversal(root);
return minn;
}
}
class Solution {
private int minn = Integer.MAX_VALUE;
TreeNode pre = null;
void InOrderTravel(TreeNode root){
if(root == null) return;
InOrderTravel(root.left);
if(pre != null){
if(root.val - pre.val < minn) minn = root.val-pre.val;
}
pre = root;
InOrderTravel(root.right);
}
public int getMinimumDifference(TreeNode root) {
InOrderTravel(root);
return minn;
}
}
标签:有序 递归遍历 minimum traversal int 链接 pre min null
原文地址:https://www.cnblogs.com/XDU-Lakers/p/13800866.html