算法课第十七周作业 | Same Tree

写在前面:

这周老师给了期末考试模拟题,做模拟题去了忘记写作业(拖延症借口),刚好有一道模拟题跟leetcode上的一样,将解题思路总结如下。


题意解读:

给定两个树,判断这两个树是不是一模一样的树。


解题思路:

分析树的结构,树由TreeNode组成的,分别是一个顶点值val和2个TreeNode指针组成。

用分治的思想,先判断val是否一样,再判断两个左边部分和两个右边部分是否一样。

先判断TreeNode是否是NULL,如果不是,将左边部分和右边部分视为另外的树,采用迭代的方法,再次判断val和比较左右两部分。

如果两个左边的TreeNode是空,则判断右边的树是否一样即可,反之亦然。

当然,也有可能传进来的是空指针,这一步放在最前面。

记得我提交Sicily的时候没有加第一步空指针的判断,看来leetcode的测试数据集更完备一些。


代码:

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
    	if(p == NULL && q == NULL)
    		return true;
    	else if (p == NULL || q == NULL)
    		return false;

        if(p->left == NULL && p->right == NULL && q->left == NULL && q->right == NULL)
        {
        	if(p->val == q->val)
        		return true;
        	else
        		return false;
        }
        else if (p->val == q->val && p->left == NULL && p->right != NULL && q->left == NULL && q->right != NULL)
        {
        	return isSameTree(p->right, q->right);
        }
        else if (p->val == q->val && p->left != NULL && p->right == NULL && q->left != NULL && q->right == NULL)
        {
        	return isSameTree(p->left, q->left);
        }
        else if (p->val == q->val && p->left != NULL && p->right != NULL && q->left != NULL && q->right != NULL)
        {
        	return (isSameTree(p->left, q->left) && isSameTree(p->right, q->right));
        }
        else
        	return false;
    }
};



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值