給定一個二叉樹,判斷其是否是一個有效的二叉搜索樹。
假設(shè)一個二叉搜索樹具有如下特征:
節(jié)點的左子樹只包含小于當前節(jié)點的數(shù)。
節(jié)點的右子樹只包含大于當前節(jié)點的數(shù)。
所有左子樹和右子樹自身必須也是二叉搜索樹。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/validate-binary-search-tree
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
實現(xiàn)思路:非遞歸中序遍歷二叉搜索樹,用一個變量暫存最小值,中序遍歷時若后面的比前面的小,則未非二叉搜索樹
實現(xiàn)代碼:
public static boolean isValidBST(TreeNode root) {
long min = Long.MIN_VALUE; // 此處用long是用來避免同是Integer的最小值
Stack<TreeNode> stack = new Stack<>();
while (!stack.isEmpty() || root != null) {
while (root != null) {
stack.push(root);
root = root.left;
}
root = stack.pop();
if (root.val <= min) {
return false;
}
min = root.val;
root = root.right;
}
return true;
}
遞歸實現(xiàn)計算二叉樹高度
public static int maxDepth(TreeNode root) {
if (root == null) return 0;
int l = maxDepth(root.left);
int r = maxDepth(root.right);
return l > r ? l + 1 : r + 1;
}