6.10 leetcode 二叉樹的最大深度, 驗證二叉搜索樹

驗證二叉搜索樹


//方法一:遞歸 時間O(n) 空間遞歸用棧空間O(n)
public boolean isValidBST(TreeNode root) {
	return (root, null, null);
}

public boolean recurse(TreeNode node, Integer lower, Integer upper) {
	if (node == null) {
		return true; 
	}
	int value = node.val;
	if (lower != null && val <= lower) return false;
	if (upper != null && val >= upper) return false;
	
	if (!recurse(node.right, val, upper)) return false;
	if (!recurse(node.left, lower, val)) return false;
	return true;
	
}

//方法二: 中序遍歷 棧  時間O(n) , 空間O(n) 開闢的stack
public boolean isValidBST(TreeNode root) {
	Stack<TreeNode> stack = new Stack();
	Integer inorder = null;
	while (!stack.isEmpty() || root != null) {
		while (root != null) {
			stack.push(root);
			root = root.left;
		}
		root = stack.pop();
		if (inorder != null && root.val <= inorder) return false;
		inorder = root.val;
		root = root.right;
	}
	return true;
}

二叉樹最大深度

// 方法一: 遞歸: 時O(n) ,空O(n)
 public int maxDepth(TreeNode root) {
        if (null == root) return 0;
        int maxDepth = Math.max(maxDepth(root.left), maxDepth(root.right)) + 1;
        return maxDepth;
    }


// 方法二 棧  迭代 :時O(n) ,空O(n)
 public int maxDepth(TreeNode root) {
        Queue<Pair<TreeNode, Integer>> stack = new LinkedList<>();
        if (root != null) {
            stack.add(new Pair(root, 1));
        }
        int depth = 0;
        while (!stack.isEmpty()) {
            Pair<TreeNode, Integer> current = stack.poll();
             TreeNode node = current.getKey();
            int currentDepth = current.getValue();
            if (node != null) {
                depth = Math.max(depth, currentDepth);
                stack.add(new Pair(node.left, currentDepth + 1));
                stack.add(new Pair(node.right, currentDepth + 1));
            }
        }
        return depth;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章