leetcode-100. Same Tree c++

1、题目来源:100. Same Tree

2、题目:

Given two binary trees, write a function to check if they are equal or not.

Two binary trees are considered equal if they are structurally identical and the nodes have the same value.

3、思路:

    1)BFS遍历两棵树;

    2)一旦结构不同(对应的一个节点为空,一个节点不为空),不同直接返回false;

    3)如果结构相同(),比较值是否相同,不同直接返回false;


4、我的源代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        bool flag=true;
		queue<TreeNode*> que1,que2;
		que1.push(p);
		que2.push(q);
		if(p==NULL&&q==NULL)
			return true;
		
		while(!que1.empty()||!que2.empty()){
		    
			if((que1.front()==NULL&&que2.front()!=NULL)||(que1.front()!=NULL&&que2.front()==NULL)){
				return false;
			}
			else if(que1.front()->val!=que2.front()->val)
			    return false;
            
			int i,n=que1.size()>que2.size()?que1.size():que2.size();
		//	cout<<"n="<<n<<endl;
			for(i=0;i<n;i++){
				TreeNode*node1=que1.front();
				que1.pop();
				TreeNode*node2=que2.front();
				que2.pop();
				if((node1->left==NULL&&node2->left!=NULL)||(node1->left!=NULL&&node2->left==NULL))
					return false;
				
				else if(node1->left!=NULL&&node2->left!=NULL){
				    if(node1->left->val!=node2->left->val)
				        return false;
				    else{
				        que1.push(node1->left);
				    	que2.push(node2->left);
				    }
					
				}
				if((node1->right==NULL&&node2->right!=NULL)||(node1->right!=NULL&&node2->right==NULL))
					return false;
				else if(node1->right!=NULL&&node1->right!=NULL){
				    if(node1->right->val!=node2->right->val)
				        return false;
					else{
					    que1.push(node1->right);
					    que2.push(node2->right);
					}
				}
			}
		}
		return flag;
    }
};

5、讨论区的精彩代码(自己也不错啦#_3,3_#加油~),递归的力量啊(来源: 点击打开链接

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值