标签:
Given two binary trees,write a function to check if they are equal or not.
Two binary trees areconsidered equal if they are structurally identical and the nodes have the samevalue.
#pragma once
#include<stack>
#include<iostream>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(NULL), right(NULL) {}
};
bool isSameTree(TreeNode *p, TreeNode *q) {
if (p == NULL&&q == NULL)
return true;//都为空
else if (p == NULL || q == NULL)
return false;//一个为空,一个不为空
//都不为空
stack<TreeNode*> sp, sq;
sp.push(p);
sq.push(q);
while (!sp.empty() && !sq.empty())
{
p = sp.top();
sp.pop();
q = sq.top();
sq.pop();
if (p->val == q->val&&p->left&&q->left)//val相等且都有左子树
{
if (p->right&&q->right)
{
sp.push(p->right);
sq.push(q->right);
}
else if (!p->right&&!q->right) {}
else return false;
sp.push(p->left); sq.push(q->left);//中序遍历,左孩子压栈
}
else if (p->val == q->val&&!p->left&&!q->left)//val相等且都无左子树
{
if (p->right&&q->right)
{
sp.push(p->right);
sq.push(q->right);
}//无左子树,向右
else if (!p->right&&!q->right)
continue;
else
return false;
}
else//其他情况返回false
return false;
}
if (!sq.empty() || !sp.empty())
return false;
return true;
}
void main()
{
TreeNode *t1 = new TreeNode(1);
TreeNode *t2 = new TreeNode(2);
TreeNode *t3 = new TreeNode(3);
TreeNode *t4 = new TreeNode(4);
TreeNode *t5 = new TreeNode(5);
TreeNode *t6 = new TreeNode(6);
TreeNode *t7 = new TreeNode(7);
TreeNode *t8 = new TreeNode(8);
TreeNode *t9 = NULL;
t1->left = t2;
t1->right = t3;
t3->left = t4;
t4->left = t5;
t4->right = t6;
t6->left = t7;
t7->left = t8;
TreeNode *t11 = new TreeNode(1);
TreeNode *t22 = new TreeNode(2);
TreeNode *t33 = new TreeNode(3);
TreeNode *t44 = new TreeNode(4);
TreeNode *t55 = new TreeNode(5);
TreeNode *t66 = new TreeNode(6);
TreeNode *t77 = new TreeNode(7);
TreeNode *t88 = new TreeNode(8);
TreeNode *t99 = NULL;
t11->left = t22;
t11->right = t33;
t33->left = t44;
t44->left = t55;
t44->right = t66;
t66->left = t77;
t77->left = t88;
TreeNode *t111 = new TreeNode(0);
TreeNode *t1111 = new TreeNode(0);
TreeNode *t222 = new TreeNode(-5);
TreeNode *t2222 = new TreeNode(-8);
t111->right = t222;
t1111->right = t2222;
cout << isSameTree(t111, t1111) << endl;
cout << isSameTree(t1, t11) << endl;
system("pause");
}
标签:
原文地址:http://blog.csdn.net/hgqqtql/article/details/43278533