【Leetcode】100. 相同的树【DFS】

题目链接

题目描述:

给定两个二叉树,编写一个函数来检验它们是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

思路:

机智的我用了一个定理: 前序遍历和中续遍历 可以唯一确定一颗二叉树。

所以我就把他们的前序遍历结果用数组存了起来,判断是否相等。

再后序遍历数组也存起来,再判断是否相等。

但是这样做有一个问题,就是结点的值一样的情况下无法判断。但是通过增加了对空结点的输出解决了这个问题。

我是用-1表示空结点的,肯定是存在问题的。

看了一下测试用例的数量,只有57个(2019-08-08 00:12:16),大概数据太弱了吧。

另外还有一个问题,我不算是问题吧,用C数组写的,写死了空间,10000个,这个不好,一方面空间浪费,另一方面结点超过10000个就不行了。(当然,这可以用C++ vector解决,也可以用C解决)

官方题解

看了官方题解,不禁想要问自己,我是猪吗?

扫描二维码关注公众号,回复: 6977092 查看本文章

为什么要写这么复杂的代码呀,明明有更简单,性能更高的代码。

思路就是递归,一个一个结点判断。

比较简单,直接看代码就可以理解了。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


bool isSameTree(struct TreeNode* p, struct TreeNode* q){
    if(p==NULL && q==NULL) {
        return true;
    }
    if(p==NULL || q==NULL) {
        return false;
    }
    if(p->val!=q->val) { return false; } return isSameTree(p->left,q->left) && isSameTree(p->right,q->right); }

性能那是杠杠的呀!

猜你喜欢

转载自www.cnblogs.com/shengwang/p/11318712.html