leetcode--Same Tree

来源:互联网 发布:什么是数据审计追踪 编辑:程序博客网 时间:2024/06/06 03:41

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.


思路1:递归,但性能很低
思路2:层次遍历,对每一个对应的节点进行检查是否完全相同(取值,左右子树是否为空等)


class Solution {public:    bool isSameTree(TreeNode* p, TreeNode* q) {         if (p == NULL && q == NULL)              return true;          else if (p == NULL || q == NULL)              return false;          return p->val == q->val && isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);      }};/** * 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) {         if (p == NULL && q == NULL)              return true;          if(!isSameNode(p, q))            return false;        queue<TreeNode*> leftq;        queue<TreeNode*> rightq;        leftq.push(p);        rightq.push(q);        while(!leftq.empty()&&!rightq.empty())        {            TreeNode* lnode=leftq.front();            TreeNode* rnode=rightq.front();            leftq.pop();            rightq.pop();            if(!isSameNode(lnode->left, rnode->left))                return false;            if(lnode->left&&rnode->left)            {                leftq.push(lnode->left);                rightq.push(rnode->left);            }            if(!isSameNode(lnode->right, rnode->right))                return false;            if(lnode->right&&rnode->right)            {                leftq.push(lnode->right);                rightq.push(rnode->right);            }        }        return true;    }    bool isSameNode(TreeNode* p, TreeNode *q)    {        if(!p && !q)            return true;        if((p && !q) || (!p && q) || (p->val != q->val))            return false;        return true;    }};
0 0
原创粉丝点击