您的位置:首页 > 其它

Leetcode 之 Same Tree

2014-11-10 11:27 330 查看
问题:

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.
解决思路:对两棵树采用深度优先遍历,每次遍历检查节点的结构和值是否一样。只需要在某种遍历树的方法的时候,确保当前遍历节点的结构和值是一样的即可。

#include <stack>
/**
* Definition for binary tree
* 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;
}
<span style="white-space:pre">	</span>if(p == NULL || q == NULL )
return false;
// if((p == NULL && q != NULL) || (p != NULL && q == NULL))
//    return false;
std::stack<TreeNode *> p_stack;
std::stack<TreeNode *> q_stack;
p_stack.push(p);
q_stack.push(q);
while(!p_stack.empty()){
TreeNode* p_current = p_stack.top();
p_stack.pop();
TreeNode* q_current = q_stack.top();
q_stack.pop();
if(p_current->val == q_current->val)
{
if((p_current->left && !q_current->left) || (!p_current->left && q_current->left) || (!p_current->right && q_current->right) || (p_current->right && !q_current->right) ){
return false;
}
if(p_current->left && q_current->left){
if(p_current->left->val != q_current->left->val)
return false;
p_stack.push(p_current->left);
q_stack.push(q_current->left);
}
if(p_current->right && q_current->right){
if(p_current->right->val != q_current->right->val)
return false;
p_stack.push(p_current->right);
q_stack.push(q_current->right);
}

}else{
return false;
}
}
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: