思路:很简单,像斐波那契数列
public int sumNums(int n) {
if (n==1)
return 1;
return sumNums(n-1)+n;
}
思路:利用好搜索二叉树条件。看root结点值和pq结点值的大小关系。
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null)
return null;
if (root.val > p.val && root.val>q.val){//pq都在左子树
return lowestCommonAncestor(root.left,p,q);
}
if (root.val<p.val && root.val<q.val){//pq都在右子树
return lowestCommonAncestor(root.right,p,q);
}
return root;
}
思路:比上题略难,但是思路差不多,分为三种情况:1. pq都在左子树;2. pq都在右子树;3. pq一个在左一个在右。再考虑下特殊情况,先写出来
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if (root == null)
return null;
if (root==p || root==q)
return root;
TreeNode left = lowestCommonAncestor(root.left,p,q);
TreeNode right = lowestCommonAncestor(root.right,p,q);
if (left!=null && right!=null){//pq一个在左子树,一个在右子树
return root;
}
if (left!=null){//pq都在左
return left;
}
if (right!=null){//pq都在右子树
return right;
}
return null;
}