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

學無先后,達者為師

網站首頁 編程語言 正文

C語言單值二叉樹真題講解_C 語言

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

【OJ - 二叉樹】單值二叉樹

LeetCode鏈接:單值二叉樹

題目難度:簡單

一、題目描述

如果二叉樹每個節點都具有相同的值,那么該二叉樹就是 單值 二叉樹。

只有給定的樹是單值二叉樹時,才返回 true;否則返回 false。

二、解題思路

二叉樹的遞歸遍歷,一般都會把問題拆分成 當前樹(根節點) 和 子樹,然后子樹又進行拆分,來解決問題。

核心思路:

1.先判斷當前節點是否為空,如果為空,返回 true(空樹也滿足單值二叉樹的條件)

2.判斷當前樹是不是單值二叉樹:

  • 先判斷當前節點的左孩子是否為空;
  • 將 當前節點的值 與 左孩子的值 進行比較,如果相等,在右孩子不為空的情況下,繼續與 右孩子的值 進行比較;
  • 如果不相等,說明 當前樹 不是單值二叉樹,返回 false。

3.繼續往下遞歸遍歷,判斷當前節點的左右子樹是不是單值二叉樹。

遞歸過程演示:

如果 a == b && a == c 為真,說明 1 是單值二叉樹。

分而治之,不斷迭代,先判斷 1 是不是單值二叉樹,再判斷 2 是不是單值二叉樹,最后判斷 3 是不是單值二叉樹。

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isUnivalTree(struct TreeNode* root){
    // 1. 先判斷當前節點是否為空
    if(root == NULL)
    {
        return true; // 空樹滿足單值二叉樹的條件
    }
    // 2. 判斷當前節點和其左右孩子是否是單值二叉樹
    // 先判斷當前節點的左孩子是否為空,并將當前節點的值與左孩子的值進行比較,看是否相等,
    // 如果相等,則繼續往下遍歷;如果不相等,說明不是單值二叉樹,則返回false。
    if(root->left && root->val != root->left->val)
    {
        return false;
    }
    if(root->right && root->val != root->right->val)
    {
        return false;
    }
    // 3. 往下遍歷,判斷當前節點的左右子樹是不是單值二叉樹
    return isUnivalTree(root->left) && isUnivalTree(root->right);
}

代碼中有個小思路,我們 if 的條件寫的是,如果左孩子不為空,且當前節點的值 != 左孩子的值,則返回 false,那為什么不寫成:如果左孩子不為空,且當前節點的值 == 左孩子的值,則怎么怎么樣……呢?因為寫 ==,不能直接得出一個結果,而寫 !=,就能得出結果 flase。

原文鏈接:https://blog.csdn.net/weixin_48025315/article/details/123221680

欄目分類
最近更新