zoukankan      html  css  js  c++  java
  • 【Leetcode】100. 相同的树【DFS】

    题目链接

    题目描述:

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

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

    思路:

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

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

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

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

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

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

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

    官方题解

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

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

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

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

    /**
     * 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);
    }

    性能那是杠杠的呀!

  • 相关阅读:
    bug排查
    做接口测试没反应
    wcf配置文件
    mvc学习-编辑提交需要注意-mvc重点
    大批量导出思路
    进程基础知识
    (转)JMS事务
    (转)JMS简明学习教程
    (转)Linux下使用system()函数一定要谨慎
    LInux文件基础知识和文件目录操作(二)文件I/O操作
  • 原文地址:https://www.cnblogs.com/shengwang/p/11318712.html
Copyright © 2011-2022 走看看