網站首頁 編程語言 正文
題目難度:簡單
一、題目描述
給你兩棵二叉樹的根節點 p 和 q ,編寫一個函數來檢驗這兩棵樹是否相同。
如果兩個樹在結構上相同,并且節點具有相同的值,則認為它們是相同的。
LeetCode鏈接:相同的樹
二、解題思路
核心思路:
先比較兩顆二叉樹的根節點
- 如果「都為空」,則返回 true,說明兩樹相同。
- 如果「一個為空一個不為空」,說明這兩顆樹不相同,則返回 false。
- 如果「都不為空,但節點值不相同」,說明這兩顆樹不相同,則返回 false。
- 經過 1 和 2 和 3 的判斷,說明根節點「都不為空,但節點值相同」,則當前節點相同。我們繼續遞歸遍歷,比較它的左子樹和右子樹的根節點。
遞歸過程演示:
依次比較兩顆二叉樹中「當前樹(1、2、3、4、5、6)的根節點」是否相等,這樣每個節點都被比較了一次。
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* struct TreeNode *left;
* struct TreeNode *right;
* };
*/
bool isSameTree(struct TreeNode* p, struct TreeNode* q){
// 1. 先比較兩顆樹的根節點
// 都為空,返回true,說明滿足相同的樹的條件
if(p == NULL && q == NULL)
{
return true;
}
// 一個為空一個不為空,返回false
if(p == NULL || q == NULL)
{
return false;
}
// 都不為空,但節點值不相等,返回false
if(p->val != q->val)
{
return false;
}
// 2. 經過前面的if的判斷,既然運行到這里了,說明當前節點相等
// 則繼續比較左子樹和右子樹的根節點
return isSameTree(p->left, q->left) && isSameTree(p->right, q->right);
}
時間復雜度:假設兩棵樹都有 n 個節點,最多比較 n 次,所以為 O ( N ) O(N) O(N)
空間復雜度:往下遞歸會開辟棧幀空間,函數返回時會還給操作系統,所以「空間復雜度」和「遞歸的最大深度」有關,最壞情況下,「遞歸的最大深度」就是有 n 的節點二叉樹的最大深度,所以為 O ( N ) O(N) O(N)
- 最大深度: 此樹為單邊樹,則深度為 n,最多向下創建 n 個棧幀,因為棧幀會邊用邊銷毀
- 最小深度: 此樹為完全二叉樹/滿二叉樹,則深度為 log2(N+1)
原文鏈接:https://blog.csdn.net/weixin_48025315/article/details/123274275
相關推薦
- 2023-02-26 go?defer?return?panic?執行順序示例詳解_Golang
- 2022-04-03 Python?八個數據清洗實例代碼詳解_python
- 2022-05-21 基于C++實現酒店管理系統_C 語言
- 2023-05-30 Pandas.concat連接DataFrame,Series的示例代碼_python
- 2022-03-06 SQLServer批量插入數據的三種方式及性能對比_C#教程
- 2023-05-23 Python中對數據庫的操作詳解_python
- 2022-03-28 Python中selenium_webdriver下拉框操作指南_python
- 2022-07-09 利用go語言實現查找二叉樹中的最大寬度_Golang
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支