力扣(98.107)补9.10

98.验证二叉搜索树

这题我真的头疼,想了很久的算法,想了又改,改了又想,总是有bug,80个用例过70多个,最后实在无力回天了。搞得代码跟屎山一样。。

这个递归遍历的思路是,每遍历到右子树结点,更新该结点的最大值,每遍历到左结点,更新该节点的最小值。这里是递归有2个参数同时遍历左右子树。

class Solution {

    public boolean isValidBST(TreeNode root) {

        return isValidBST(root, Long.MIN_VALUE, Long.MAX_VALUE);

    }

    public boolean isValidBST(TreeNode node, long lower, long upper) {

        if (node == null) {

            return true;

        }

        if (node.val <= lower || node.val >= upper) {

            return false;

        }

        return isValidBST(node.left, lower, node.val) && isValidBST(node.right, node.val, upper);

    }

}

107.二叉树的层序遍历Ⅱ

不会,这题就是用队列迭代的方法,广度优先遍历。但我用的不熟。算法其实不难理解。


class Solution {
    public List> levelOrderBottom(TreeNode root) {
        Deque deque=new LinkedList();
        List> ans=new LinkedList>();
        if(root==null)
        return ans;
        deque.offer(root);
        while(!deque.isEmpty()){
            List cnt=new ArrayList<>();
            int size=deque.size();
            for(int i=0;i                 TreeNode node=deque.poll();
                cnt.add(node.val);
                if(node.left!=null)
                deque.offer(node.left);
                if(node.right!=null)
                deque.offer(node.right);
            }
            ans.add(0,cnt);
        }
        return ans;

    }
}

你可能感兴趣的:(力扣,算法,leetcode,java,数据结构)