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

    性能那是杠杠的呀!

  • 相关阅读:
    LUA 协程
    LUA GC 简单测试
    软件重构-笔记
    托管执行过程
    文件夹 加密
    db 文件 查看 打开 工具 db 中文 版 navicat 中文
    qq sid qq sid 是什么 qq sid 怎么用
    windows系统,联系人文件。个性化。
    csdn 音乐 怎么拦截 提交后的程序 csdn 栏目 音乐 csdn 添加 音乐
    CSDN博客栏目设置个性化
  • 原文地址:https://www.cnblogs.com/shengwang/p/11318712.html
Copyright © 2011-2022 走看看