2015年8月29日星期六

#LeetCode# Same Tree

开学前这阵真是无聊透顶,安卓的项目接近尾声,今天交大校友会的一师兄问我对新项目APP有没有兴趣,回答当然是好呀好呀有呀。今晚,来学习学习LeetCode吧。

经典“相似树”问题,这里注意有节点权值相等。思路很简单,首先判断根节点权值是否相等,然后递归左右子树,直接上代码了。


/**

 * Definition for a binary tree node.

 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
public class Solution {
    public boolean isSameTree(TreeNode p, TreeNode q) {
        if (p == null && q == null) {
            return true;
        } else if (p == null || q==null) {
            return false;
        }
        if (p.val == q.val) {
                return isSameTree(p.left, q.left) && isSameTree(p.right, q.right);
            } else {
                return false;
            }
    }
}

提交了三次才Accepted,说说我遇到的问题,

1. 首先判断树为空的条件,两个空树也是相似树!!两个空树也是相似树!!并且注意是两个树同时为空!!一个为空,另一个不为空就是false;
  我们可以用笨办法,对四种情形挨个条件语句判断(别问我什么是四个..)

2.习惯性的return 0,LeetCode不接受,说是不支持int类型的boolean,只好乖乖改成false和true;

3.我有一个疑问,先判断p.val == q.val然后else,与先判断p.val !=q.val然后else,两种方法的效率是怎样的差别?

4.我还有一个疑问,每次编辑Blog总记不清楚自己用的是小号字还是正常大小的字,莫怪...

5.再补充一句,这次写的括号有点多...看起来怎么都不自然


LOL!

没有评论:

发表评论