您的位置:首页 > 编程语言 > C语言/C++

100. Same Tree

2016-07-16 13:15 218 查看

题目: Same Tree

原题链接:https://leetcode.com/problems/same-tree/

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.

判断两颗二叉树是否相等,判断的标准:结构相同,对应节点上的值也相同。

先看一段没有AC的代码:

/**
* Definition for a binary tree node.
* struct TreeNode {
*     int val;
*     TreeNode *left;
*     TreeNode *right;
*     TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
void preOrder(TreeNode* root, vector<int>& pre) {
if(root == NULL) return;
preOrder(root -> left, pre);
pre.push_back(root -> val);
preOrder(root -> right, pre);
}
void inOrder(TreeNode* root, vector<int>& in) {
if(root == NULL) return;
in.push_back(root -> val);
inOrder(root -> left, in);
inOrder(root -> right, in);
}
bool isSameTree(TreeNode* p, TreeNode* q) {
vector<int> pre1, pre2, in1, in2;
preOrder(p, pre1);
preOrder(q, pre2);
inOrder(p, in1);
inOrder(q, in2);
if((pre1 == pre2) && (in1 == in2)) return true;
else return false;
}
};


看起来没有问题,前序和中序可以唯一的确定一颗二叉树,所以分别对两颗二叉树进行前序和中序便利,对比结果应该可以判断,但是结果54个测试点只过了53个,看了一下WA的那个测试点,给出的输入数据是这样的:



可以看出,输入的两颗二叉树的区别在于一个只有左孩子节点,一个只有右孩子节点,然后无论是孩子节点还是根节点,所有的数值都是一样的!!= =,就造成了pre数组和in数组里面数值相等的情况。。。

正确的方法应该要更加严密的考虑结构的问题,采用递归的方法,同时遍历两棵树,注意判别节点是不是空,代码如下:

/**
* Definition for a binary tree node.
* 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 (p == q);
return (p -> val == q -> val) && isSameTree(p -> left, q -> left) && isSameTree(p -> right, q -> right);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  leetcode C++