标签:
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