题目:
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.
https://oj.leetcode.com/problems/same-tree/ 点击打开链接解题思路:先序、后续、中序遍历都不能唯一决定一棵二叉树,只有中序遍历,且每个空节点也计算进去,当成val=INT_MIN来计算,才能唯一确定一颗二叉树。
#include<iostream>
#include<vector>
#include<queue>
using namespace std;
struct TreeNode
{
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
void levelTraverse(TreeNode *root,vector<int> &result)
{
queue<TreeNode *> q;
q.push(root);
result.push_back(q.front()->val);
while(!q.empty())
{
if(q.front()->left==NULL)
result.push_back(INT_MIN);
else
{
result.push_back(q.front()->left->val);
q.push(q.front()->left);
}
if(q.front()->right==NULL)
result.push_back(INT_MIN);
else
{
result.push_back(q.front()->right->val);
q.push(q.front()->right);
}
q.pop();
}
}
bool isSameTree(TreeNode *p, TreeNode *q)
{
if(p==NULL && q==NULL)
return true;
if(p==NULL || q==NULL)
return false;
vector<int>pResult,qResult;
levelTraverse(p,pResult);
levelTraverse(q,qResult);
if(pResult.size()!=qResult.size())
return false;
for(int i=0;i<pResult.size();i++)
if(pResult[i]!=qResult[i])
return false;
return true;
}
int main()
{
TreeNode* p=new TreeNode(1);
p->left=new TreeNode(1);
// p->right=new TreeNode(1);
TreeNode* q=new TreeNode(1);
// q->left=new TreeNode(2);
q->right=new TreeNode(1);
cout<<isSameTree(p,q)<<endl;
system("pause");
return 0;
}