【leetcode 简单】第二十一题 相同的树

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

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

示例 1:

输入:       1         1
          / \       /          2   3     2   3

        [1,2,3],   [1,2,3]

输出: true

示例 2:

输入:      1          1
          /                    2             2

        [1,2],     [1,null,2]

输出: false

示例 3:

输入:       1         1
          / \       /          2   1     1   2

        [1,2,1],   [1,1,2]

输出: false
/**
 * 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 1;
    }
    if ((p == NULL && q !=NULL) || (p != NULL && q == NULL)) //一个为空一个不为空
    {
        return 0;
    }
    if(p->val != q->val) //根不同
    {
        return 0;
    }
    if (p->left == NULL && q->left == NULL) //左边为空,对比右边
    {
        return isSameTree(p->right,q->right);
    }
    if ((p->left!=NULL && q->left !=NULL) && (p->left->val == q->left->val)) //左边不同时为空,左边的val相同,判断左侧和右侧是否相等
    {
        return isSameTree(q->left,p->left) && isSameTree(q->right,p->right);
    }
    return 0;
}

原文地址:https://www.cnblogs.com/flashBoxer/p/9484502.html

时间: 2024-11-09 16:53:40

【leetcode 简单】第二十一题 相同的树的相关文章

经典算法题每日演练——第二十一题 十字链表

原文:经典算法题每日演练--第二十一题 十字链表 上一篇我们看了矩阵的顺序存储,这篇我们再看看一种链式存储方法“十字链表”,当然目的都是一样,压缩空间. 一:概念 既然要用链表节点来模拟矩阵中的非零元素,肯定需要如下5个元素(row,col,val,down,right),其中: row:矩阵中的行. col:矩阵中的列. val:矩阵中的值. right:指向右侧的一个非零元素. down:指向下侧的一个非零元素. 现在我们知道单个节点该如何表示了,那么矩阵中同行的非零元素的表示不就是一个单链

hiho一下 第二十一周(线段树 离散化)

知识点1:离散化  对于这些区间来说,其实并不会在乎具体数值是多少,而是在他们的左右端点之间互相进行比较而已.所以你就把这N个区间的左右端点——2N个整数提出来,处理一下呗?你要注意的是,这2N个数是什么其实并不重要,你可以把这2N个数替换成为任何另外2N个数,只要他们之间的相对大小关系不发生改变就可以.” 解决方法: 那么我需要额外做的事情就是在构建线段树之前对区间进行预处理:将区间的左右端点选出来,组成一个集合,然后将这个集合依次对应到正整数集合上,并且利用这个对应将原来的区间的左右端点更换

LeetCode第五十一题-N皇后

N-Queens 问题简介:给定一个n*n的棋盘,求解如何将n个皇后放置在棋盘上, 保证其之间不互相攻击,即给定一个整数 n,返回所有不同的解决方案,用 ‘Q’ 和 ‘.’ 分别代表了皇后和空位 注:例如下图为n = 8 时的一个解 举例: 输入: 4 输出: [ [".Q…", // Solution 1 “…Q”, “Q…”, “…Q.”], ["…Q.", // Solution 2 “Q…”, “…Q”, “.Q…”] ] 解法一: 利用递归,首先从第一行元

剑指Offer第二十一题 栈的压入、弹出序列

输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列.(注意:这两个序列的长度是相等的) 思路:压栈操作次数固定,用变量记录压栈次数,同时当栈顶元素与弹出序列指针所指位置相同时,执行出栈操作. 代码实现如下: 1 import java.util.*; 2 3 public class

codeforces水题100道 第二十一题 Codeforces Beta Round #65 (Div. 2) A. Way Too Long Words (strings)

题目链接:http://www.codeforces.com/problemset/problem/71/A题意:将长字符串改成简写格式.C++代码: #include <string> #include <iostream> using namespace std; int n; string s; int main() { cin >> n; while (n --) { cin >> s; if (s.length() > 10) cout &l

【leetcode 简单】第四十一题 阶乘后的零

给定一个整数 n,返回 n! 结果尾数中零的数量. 示例 1: 输入: 3 输出: 0 解释: 3! = 6, 尾数中没有零. 示例 2: 输入: 5 输出: 1 解释: 5! = 120, 尾数中有 1 个零. 说明: 你算法的时间复杂度应为 O(log n) . class Solution(object): def trailingZeroes(self, n): """ :type n: int :rtype: int """ count

看雪CTF 2016_第二十一题分析

高清文档及CM下载地址:http://url.cn/42VhonH 原文地址:https://www.cnblogs.com/Sendige/p/9604899.html

每日一题 为了工作 2020 0323 第二十一题

/** * 题目:将单向链表按某值划分成左边小.中间相等.右边大的形式 * * 要求: * 给定一个单向链表的头节点 head, 节点的值类型是整型, 再给定一个整数 privot.实现 *一个调整链表的函数, 将链表调整为左部分都是值小于privot的节点, 中间部分都是值等于privot *的节点, 右部分都是值大于privot的节点.除这个要求外, 对调整后的节点顺序没有更多的要求. *例如: 链表 9->0->4->5->1, privot=3.调整后链表可以是1->

《剑指offer》第二十一题:调整数组顺序使奇数位于偶数前面

// 面试题21:调整数组顺序使奇数位于偶数前面 // 题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有 // 奇数位于数组的前半部分,所有偶数位于数组的后半部分. #include <cstdio> void Reorder(int* pData, unsigned int length, bool (*func)(int)); bool isEven(int n); // ====================方法一==================== void