Tree & Binary Tree & Binary Search Tree & Graph
Tree
Binary Tree
都有左右孩子——完全二叉树
Binary Search Tree
Graph
面试题
98. Validate Binary Search Tree
自己的解法:错误!!首先,右子树要全部大于根节点,注意判断,其次,注意递归传递数值的选择,要分析后找到简洁的!
还要注意题意,其中一个子树为空,也要返回true。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode() {}
* TreeNode(int val) { this.val = val; }
* TreeNode(int val, TreeNode left, TreeNode right) {
* this.val = val;
* this.left = left;
* this.right = right;
* }
* }
*/
class Solution {
public boolean isValidBST(TreeNode root) {
if(root==null){return true;}
return isValid(root);
}
public boolean isValid(TreeNode node){
if(node.left==null && node.right ==null){return true;}
if(node.left==null && node.right !=null){
if(node.right.val<=node.val){return false;}
return isValid(node.right);}
if(node.left!=null && node.right ==null){
if(node.left.val>=node.val){return false;}
return isValid(node.left);}
if(node.right.val<=node.val || node.left.val>=node.val){
return false;
}else{return isValid(node.left)&&isValid(node.right);}
}
}
正确的递归:
class Solution {
public boolean isValidBST(TreeNode root) {
return isValid(root,null,null);
}
boolean isValid(TreeNode root,Integer max, Integer min){
if(root==null){return true;}
if((max !=null && root.val <=max)||(min !=null && root.val >=min)){return false;}
return isValid(root.right,root.val,min) && isValid(root.left,max,root.val);
}
}
235. Lowest Common Ancestor of a Binary Search Tree
解法:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode max ;
TreeNode min ;
if (root==null || root == p || root ==q ){return root;}
if(p.val>q.val){
if(p.val<root.val){return lowestCommonAncestor(root.left,p,q);}
if(q.val>root.val){return lowestCommonAncestor(root.right,p,q);}
return root;
}else{
if(q.val<root.val){return lowestCommonAncestor(root.left,q,p);}
if(p.val>root.val){return lowestCommonAncestor(root.right,q,p);}
return root;
}
}
}
简洁版代码,增加了运行时间
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
TreeNode max ;
TreeNode min ;
if (root==null || root == p || root ==q ){return root;}
if(p.val<root.val && q.val<root.val){return lowestCommonAncestor(root.left,p,q);}
if(q.val>root.val && p.val>root.val){return lowestCommonAncestor(root.right,p,q);}
return root;
}
}
236. Lowest Common Ancestor of a Binary Tree
解法:
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null || root==p ||root ==q){return root;}
TreeNode left= lowestCommonAncestor(root.left , p, q);
TreeNode right= lowestCommonAncestor(root.right , p, q);
if(left==null){return right;}
if(right==null){return left;}
return root;
}
}