国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)OJ

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)OJ。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

1. 單值二叉樹

2. 檢查兩顆樹是否相同

3. 對稱二叉樹

4. 二叉樹的前序遍歷

5. 二叉樹的中序遍歷

6. 二叉樹的后序遍歷

7. 另一顆樹的子樹

8. 二叉樹的結(jié)構(gòu)及遍歷


世界上沒有不勞而獲的東西!


1. 單值二叉樹

鏈接:力扣

代碼1

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool isUnivalTree(struct TreeNode* root)
{
    if (root == NULL)
    {
        return true;
    }
    if (root->left && root->val != root->left->val)
    {
        return false;
    }
    if (root->right && root->val != root->right->val)
    {
        return false;
    }
    return isUnivalTree(root->left) && isUnivalTree(root->right);

}

思想:(1)【左孩子的返回值是否相等+右孩子的返回值是否相等】當(dāng)左孩子和根比較不相等或者右孩子和根比較不相等,這個樹就是不相等的【返回true的條件比較多,所以,返回不相等的條件少】【代碼1】(2)遍歷,和根的值進行比較

注意:(1)在OJ題中盡量不要定義靜態(tài)變量和全局變量

2. 檢查兩顆樹是否相同

鏈接:力扣

代碼

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

思想:遞歸;分治

3. 對稱二叉樹

鏈接:力扣

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
bool _isSymmetric(struct TreeNode* p, struct TreeNode* q)
{
    //
    if (p == NULL && q == NULL)
    {
        return true;
    }
    //其中一個為空
    if (p == NULL || q == NULL)
    {
        return false;
    }
    return p->val == q->val && _isSymmetric(p->left, q->right) && _isSymmetric(p->right, q->left);
}

bool isSymmetric(struct TreeNode* root)
{
    if (root == NULL)
    {
        return true;
    }
    return _isSymmetric(root->left, root->right);

}

思想:首先,判斷樹的左子樹和右子樹是否相等;然后,判斷左子樹的左子樹和右子樹的右子樹以及左子樹的右子樹和右子樹的左子樹是否相等,以及重復(fù)這個操作

4. 二叉樹的前序遍歷

鏈接:力扣

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */
/**
 * Note: The returned array must be malloced, assume caller calls free().
 //意思是返回值可以被malloc,假設(shè)由調(diào)用者釋放
 */
//首先確定二叉樹的節(jié)點個數(shù)
int BinaryTreeSize(struct TreeNode* root)
{
    return root == NULL ? 0 : (BinaryTreeSize(root->left)+BinaryTreeSize(root->right) + 1);
}

int* preorder(struct TreeNode* root, int* a, int* pi)
{
    if (root == NULL)
    {
        return;
    }
    a[*pi] = root->val;
    (*pi)++;
    preorder(root->left, a, pi);
    preorder(root->right, a, pi);
}

int* preorderTraversal(struct TreeNode* root, int* returnSize)
{
    //定義的是數(shù)組的指針,因為定義的如果是數(shù)組,出了這個函數(shù),就被銷毀了
    int size = BinaryTreeSize(root);//j節(jié)點個數(shù)
    int* a = (int*)malloc(sizeof(int) * size);//定義數(shù)組
    if (a == NULL)
    {
        printf("malloc fail\n");
        exit(-1);
    }
    *returnSize = size;
    //前序遍歷,并把結(jié)果,給數(shù)組,
    int i = 0;
    preorder(root,a, &i);
    return a;
}

思想:首先,我們可以非常容易地想到前序遍歷的,把之前學(xué)到過的前序遍歷的printf,改成數(shù)組的賦值。看題意,我們需要定義一個數(shù)組的指針和二叉樹的節(jié)點個數(shù),然后盡可以調(diào)用前序遍歷的函數(shù),進行解決。

注意:returnSize?這個代表的是數(shù)組的大小,這個函數(shù),相當(dāng)于輸出型參數(shù),returnSize,外面定義了,但是沒有值,需要我們對齊進行賦值?!具@里應(yīng)該用指針,因為形參的改變并不影響實參】

5. 二叉樹的中序遍歷

鏈接:力扣

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */
int BinaryTreeSize(struct TreeNode* root)
{
    return root == NULL ? 0 : (BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1);
}


void inorder(struct TreeNode* root, int* a, int* pi)
{
    if (root == NULL)
    {
        return;
    }
    inorder(root->left, a, pi);
    a[*pi] = root->val;
    (*pi)++;
    inorder(root->right, a, pi);
}

int* inorderTraversal(struct TreeNode* root, int* returnSize)
{
    int size = BinaryTreeSize(root);
    *returnSize = size;
    int* a = (int*)malloc(sizeof(int) * size);
    if (a == NULL)
    {
        printf("malloc fail\n");
        exit(-1);
    }
    int i = 0;
    inorder(root, a, &i);
    return a;
}

6. 二叉樹的后序遍歷

鏈接:力扣

代碼

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


/**
 * Note: The returned array must be malloced, assume caller calls free().
 */

int BinaryTreeSize(struct TreeNode* root)
{
   return root == NULL ? 0 : (BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1);
}

void postorder(struct TreeNode* root, int* a, int* pi)
{
    if (root == NULL)
    {
        return;
    }
    postorder(root->left, a, pi);
    postorder(root->right, a, pi);
    a[*pi] = root->val;
    (*pi)++;
}

int* postorderTraversal(struct TreeNode* root, int* returnSize)
{
    int size = BinaryTreeSize(root);
   *returnSize = size;
   int* a = (int*)malloc(sizeof(int) * size);
   int i = 0;
   postorder(root, a, &i);
   return a;
}

7. 另一顆樹的子樹

鏈接:力扣

代碼

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


bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
    if (root == NULL)
    {
        return false;
    }
    return isSameTree(root, subRoot) || isSubtree(root->left, subRoot) || isSubtree(root->right, subRoot);
}

思想:分治,根中是否有和subRoot相等+左子樹中是否有和subRoot相等的部分+左子樹中是否有和subRoot相等的部分。

注意:主函數(shù)中,我們可能會漏掉if這個條件語句,如果不寫這個代碼,root->left,就會出現(xiàn)問題。

8. 二叉樹的結(jié)構(gòu)及遍歷

鏈接:???/p>

代碼

#include <stdio.h>
#include <stdlib.h>
typedef struct BinaryTreeNode
{
    char data;
    struct BinaryTreeNode* left;
    struct BinaryTreeNode* right;
}BTNode;
//先構(gòu)建一個二叉樹【前序遍歷】
 BTNode* CreatTree(char* a, int* pi)
 {
    if (a[*pi] == '#')
    {
        (*pi)++;
        return NULL;
    }
    //先構(gòu)建根
    BTNode* root = (BTNode*)malloc(sizeof(BTNode));
    root->data = a[*pi];
    (*pi)++;
    //再構(gòu)建左子樹和右子樹
    root->left = CreatTree(a, pi);
    root->right = CreatTree(a, pi);
    return root;
 }

void InOrder(BTNode* root)
{
    if (root == NULL)
    {
        return;
    }
    InOrder(root->left);
    printf("%c ", root->data);
    InOrder(root->right);
}

int main()
{
    char a[100];
    scanf("%s", a);
    int i = 0;
    BTNode* tree = CreatTree(a, &i);
    InOrder(tree);
    free(tree);
    tree = NULL;
    return 0;
}

思想:先序遍歷的思想的字符串,建立二叉樹【遇到'#',就返回NULL】,然后再中序遍歷的思想進行打印。文章來源地址http://www.zghlxwxcb.cn/news/detail-568398.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)OJ的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 【數(shù)據(jù)結(jié)構(gòu)】_8.二叉樹OJ

    目錄 1. 題目1:檢查兩棵樹是否相同 ?2. 題目2:判斷一棵樹是否為另一棵樹的子樹 3. 題目3:翻轉(zhuǎn)二叉樹 4. 題目4:判斷一棵樹是否為平衡二叉樹 5. 題目5:判斷一棵樹是否為對稱二叉樹 6. 題目6:二叉樹的層序遍歷 7. 題目7:二叉樹的遍歷 8. 題目8:二叉樹的最近公共祖先 9.

    2024年02月12日
    瀏覽(20)
  • 數(shù)據(jù)結(jié)構(gòu):二叉樹(初階)

    數(shù)據(jù)結(jié)構(gòu):二叉樹(初階)

    朋友們、伙計們,我們又見面了,本期來給大家解讀一下二叉樹方面的相關(guān)知識點,如果看完之后對你有一定的啟發(fā),那么請留下你的三連,祝大家心想事成! ? C 語 言 專 欄:C語言:從入門到精通 數(shù)據(jù)結(jié)構(gòu)專欄:數(shù)據(jù)結(jié)構(gòu) 個? 人? 主? 頁?:stackY、 目錄 ??編輯 前言:

    2024年02月07日
    瀏覽(18)
  • 二叉樹經(jīng)典OJ題——【數(shù)據(jù)結(jié)構(gòu)】

    二叉樹經(jīng)典OJ題——【數(shù)據(jù)結(jié)構(gòu)】

    W...Y的主頁 ??? 代碼倉庫分享 ??? 今天我們來進行二叉樹的OJ練習(xí),就是利用二叉樹的前序、中序、后續(xù)以及晨序遍歷的特性進行OJ訓(xùn)練。話不多說,來看我們的第一道題。 【leetcode 965.單值二叉樹】 OJ鏈接? 如果二叉樹每個節(jié)點都具有相同的值,那么該二叉樹就是 單值 二

    2024年02月07日
    瀏覽(22)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】樹,二叉樹

    【數(shù)據(jù)結(jié)構(gòu)初階】樹,二叉樹

    讓我們開始二叉樹之前先復(fù)習(xí)回顧下之前學(xué)習(xí)的知識 1.1樹的概念 樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 有一個特殊的結(jié)點,稱為根結(jié)點, 根節(jié)

    2024年02月04日
    瀏覽(18)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(2)

    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(2)

    1.1二叉樹的順序結(jié)構(gòu) 普通的二叉樹是不適合用數(shù)組來存儲的,因為可能會存在大量的空間浪費。而完全二叉樹更適合使用順序結(jié)構(gòu)存儲?,F(xiàn)實中我們通常把堆(一種二叉樹)使用順序結(jié)構(gòu)的數(shù)組來存儲,需要注意的是這里的堆和操作系統(tǒng)虛擬進程地址空間中的堆是兩回事,一個

    2024年02月04日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1)

    【數(shù)據(jù)結(jié)構(gòu)初階】二叉樹(1)

    讓我們開始二叉樹之前先復(fù)習(xí)回顧下之前學(xué)習(xí)的知識 1.1樹的概念 樹是一種 非線性 的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 有一個特殊的結(jié)點,稱為根結(jié)點, 根節(jié)

    2024年02月04日
    瀏覽(41)
  • 數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)初階--二叉樹的鏈?zhǔn)浇Y(jié)構(gòu)

    目錄 一.二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的概念 二.二叉樹鏈?zhǔn)浇Y(jié)構(gòu)的功能實現(xiàn) 2.1.鏈?zhǔn)蕉鏄涞亩x 2.2.鏈?zhǔn)蕉鏄涞臉?gòu)建 2.3.鏈?zhǔn)蕉鏄涞谋闅v 2.3.1.先序遍歷 2.3.2.中序遍歷 2.3.3.后序遍歷 2.3.4.層序遍歷 2.4.鏈?zhǔn)蕉鏄涞那蠖鏄涞慕Y(jié)點數(shù)量 法一:計數(shù)法 法二:分治法 2.5.鏈?zhǔn)蕉鏄涞那蠖?/p>

    2024年02月12日
    瀏覽(28)
  • 數(shù)據(jù)結(jié)構(gòu):鏈?zhǔn)蕉鏄涑蹼A

    數(shù)據(jù)結(jié)構(gòu):鏈?zhǔn)蕉鏄涑蹼A

    目錄 一.鏈?zhǔn)蕉鏄涞倪壿嫿Y(jié)構(gòu) 1.鏈?zhǔn)蕉鏄涞慕Y(jié)點結(jié)構(gòu)體定義 2.鏈?zhǔn)蕉鏄溥壿嫿Y(jié)構(gòu) 二.鏈?zhǔn)蕉鏄涞谋闅v算法 1.前序遍歷 2.中序遍歷 3.后序遍歷? 4.層序遍歷(二叉樹非遞歸遍歷算法) 層序遍歷概念: 層序遍歷算法實現(xiàn)思路:? 層序遍歷代碼實現(xiàn): 三.鏈?zhǔn)蕉鏄浔闅v算法的運用

    2024年02月02日
    瀏覽(16)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹OJ題(C語言實現(xiàn))

    【數(shù)據(jù)結(jié)構(gòu)】二叉樹OJ題(C語言實現(xiàn))

    ???????????????? ???????????????? ???????????????????????????????? ???????????????????????????????? ???? 追風(fēng)趕月莫停留 ???? ???????????????????????????????? ???? 平蕪盡處是春山

    2024年03月17日
    瀏覽(20)
  • 【LeetCode】【數(shù)據(jù)結(jié)構(gòu)】二叉樹必刷OJ題

    【LeetCode】【數(shù)據(jù)結(jié)構(gòu)】二叉樹必刷OJ題

    ?? 樊梓慕: 個人主頁 ? ?? 個人專欄: 《C語言》《數(shù)據(jù)結(jié)構(gòu)》《藍橋杯試題》《LeetCode刷題筆記》《實訓(xùn)項目》 ?? 每一個不曾起舞的日子,都是對生命的辜負(fù) 目錄 前言 【LeetCode】226.翻轉(zhuǎn)二叉樹 【LeetCode】100.相同的樹 【LeetCode】5.對稱二叉樹 【LeetCode】9.另一顆樹的子樹

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包