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) {
Dequedeque=new LinkedList ();
List> ans=new LinkedList
>();
if(root==null)
return ans;
deque.offer(root);
while(!deque.isEmpty()){
Listcnt=new ArrayList<>();
int size=deque.size();
for(int i=0;iTreeNode 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;}
}