这道题是要找到二叉搜索树的任意节点的最小差值。
比如[543,384,652,null,445,null,699]的最小差值是47
那么众所周知,二叉搜索树,左儿子<父节点<右儿子。那么中序遍历即可找出顺序,问题就可以解决。
那么给这个问题稍稍增加难度,不允许用递归,那么只能用非递归的方式,没想到,中序遍历的非递归和前序遍历的非递归,差距很大,代码如下
public static class TreeNode {
int val;
TreeNode left;
TreeNode right;
TreeNode(int x) { val = x; }
}
public static int getMinimumDifference(TreeNode root) {
Stack<TreeNode> st = new Stack<>();
if(root==null)return 0;
int last = Integer.MIN_VALUE;
int min=Integer.MAX_VALUE;
while(root!=null || !st.empty()){
while(root!=null){
st.push(root);
root=root.left;
}
if(!st.empty()){
root=st.pop();
if(last!=Integer.MIN_VALUE)min = Math.min(min,root.val-last);
last=root.val;
root = root.right;
}
}
return min;
}
后记:中序遍历非递归很不好写(我也是在网上抄作业才过的),后序遍历非递归更难写。
网友评论