日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

C語言詳解判斷相同樹案例分析_C 語言

作者:CodeWinter ? 更新時間: 2022-06-22 編程語言

題目難度:簡單

一、題目描述

給你兩棵二叉樹的根節點 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

欄目分類
最近更新