码迷,mamicode.com
首页 > 其他好文 > 详细

100.Same Tree

时间:2015-01-30 09:11:06      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

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");

}



100.Same Tree

标签:

原文地址:http://blog.csdn.net/hgqqtql/article/details/43278533

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!