美文网首页
Minimum Absolute Difference in B

Minimum Absolute Difference in B

作者: Ukuleler | 来源:发表于2019-05-29 11:44 被阅读0次

这道题是要找到二叉搜索树的任意节点的最小差值。

比如[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;
    }

后记:中序遍历非递归很不好写(我也是在网上抄作业才过的),后序遍历非递归更难写。

相关文章

网友评论

      本文标题:Minimum Absolute Difference in B

      本文链接:https://www.haomeiwen.com/subject/uybetctx.html