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

【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典)

這篇具有很好參考價值的文章主要介紹了【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。


【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法


一、前置說明

其他數(shù)據(jù)結(jié)構(gòu)不同,二叉樹的增刪查改接口實現(xiàn)的意義不大(后續(xù)搜索樹的增刪查改才有意義)。普通初階二叉樹更重要的是學習控制結(jié)構(gòu),為后續(xù)的AVL樹、紅黑樹等高級數(shù)據(jù)結(jié)構(gòu)打下基礎(chǔ)。同時大部分OJ題也出在此處。


二、二叉樹的遍歷

所謂二叉樹遍歷(Traversal)是按照某種特定的規(guī)則,依次對二叉樹中的節(jié)點進行相應(yīng)的操作,并且每個節(jié)點只操作一次。訪問結(jié)點所做的操作依賴于具體的應(yīng)用問題。
?
【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法
按照規(guī)則,二叉樹的遍歷有:前序/中序/后序的遞歸結(jié)構(gòu)遍歷:

  • 前序遍歷(Preorder Traversal 亦稱先序遍歷)——訪問順序:根節(jié)點—>左子樹—>右子樹
  • 中序遍歷(Inorder Traversal)——訪問順序:左子樹—>根節(jié)點—>右子樹
  • 后序遍歷(Postorder Traversal)——訪問順序:左子樹—>右子樹—>根節(jié)點

2.1前序遍歷

【代碼思路】:

  1. 若二叉樹為空,則直接返回。
  2. 訪問根節(jié)點。
  3. 遞歸遍歷左子樹,即調(diào)用前序遍歷函數(shù),傳入左子樹的根節(jié)點。
  4. 遞歸遍歷右子樹,即調(diào)用前序遍歷函數(shù),傳入右子樹的根節(jié)點

代碼:

void PrevOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	printf("%d ", root->data);
	PrevOrder(root->left);
	PrevOrder(root->right);
}

2.2中序遍歷

【代碼思路】:

  1. 首先判斷二叉樹是否為空,若為空則直接返回。
  2. 對當前節(jié)點的左子樹進行中序遍歷,即遞歸調(diào)用中序遍歷函數(shù)。
  3. 訪問當前節(jié)點的值。
  4. 對當前節(jié)點的右子樹進行中序遍歷,即遞歸調(diào)用中序遍歷函數(shù)。

代碼:

void InOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("NULL ");
		return;
	}

	InOrder(root->left);
	printf("%d ", root->data);
	InOrder(root->right);
}

2.3 后序遍歷

【代碼思路】:

  1. 判斷當前節(jié)點是否為空,若為空則返回。
  2. 遞歸遍歷當前節(jié)點的左子樹。
  3. 遞歸遍歷當前節(jié)點的右子樹。
  4. 訪問當前節(jié)點。

代碼:

void PostOrder(BTNode* root)
{
	if (root == NULL)
	{
		printf("N ");
		return;
	}

	PostOrder(root->left);
	PostOrder(root->right);
	printf("%d ", root->data);
}

三、以前序遍歷為例,遞歸圖解

前序遍歷遞歸圖解:


【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法


【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法
上述三種遍歷結(jié)果:

  1. 前序遍歷結(jié)果:1 2 3 4 5 6
  2. 中序遍歷結(jié)果:3 2 1 5 4 6
  3. 后序遍歷結(jié)果:3 2 5 6 4 1

四、層序遍歷

層序遍歷:除了先序遍歷、中序遍歷、后序遍歷外,還可以對二叉樹進行層序遍歷。設(shè)二叉樹的根節(jié)點所在層數(shù)為1,層序遍歷就是從所在二叉樹的根節(jié)點出發(fā),首先訪問第一層的樹根節(jié)點,然后從左到右訪問第2層上的節(jié)點,接著是第三層的節(jié)點,以此類推,自上而下,自左至右逐層訪問樹的結(jié)點的過程就是層序遍歷。
【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法
【代碼思路】:(核心思想:上一層出時帶下一層進隊列,即根節(jié)點出棧時,根節(jié)點的孩子節(jié)點入棧)

  1. 首先將根節(jié)點入棧。
  2. 循環(huán)進行以下操作,直到棧為空。
    。彈出棧頂元素,并將其值輸出;
    。如果該節(jié)點有右子節(jié)點,則將右子節(jié)點入棧。
    。 如果該節(jié)點有左子節(jié)點,則將左子節(jié)點入棧

棧相關(guān)代碼自行查看:棧和隊列代碼實現(xiàn)

代碼:

void LevelOrder(BTNode* root)
{
	Queue q;
	QueueInit(&q);

	if (root)
		QueuePush(&q, root);

	while (!QueueEmpty(&q))
	{
		BTNode* front = QueueFront(&q);
		QueuePop(&q);

		printf("%d ", front->data);

		if(front->left)
			QueuePush(&q, front->left);

		if (front->right)
			QueuePush(&q, front->right);
	}

	printf("\n");

	QueueDestroy(&q);
}

五、節(jié)點個數(shù)以及高度等

5.1 二叉樹節(jié)點個數(shù)

【代碼思路】:

  1. 如果二叉樹為空,則節(jié)點個數(shù)為0。
  2. 否則,節(jié)點個數(shù)等于根節(jié)點的個數(shù)加上左子樹的節(jié)點個數(shù)和右子樹的節(jié)點個數(shù)。
  3. 遞歸計算左子樹的節(jié)點個數(shù)。
  4. 遞歸計算右子樹的節(jié)點個數(shù)。
  5. 返回根節(jié)點個數(shù)加上左子樹和右子樹的節(jié)點個數(shù)。

代碼:

int BinaryTreeSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}
	return  BinaryTreeSize(root->left) + BinaryTreeSize(root->right) + 1;
}

5.2二叉樹葉子節(jié)點個數(shù)

【代碼思路】:

  1. 判斷根節(jié)點是否為空,若為空,則返回0。
  2. 判斷根節(jié)點的左右子樹是否為空,若都為空,則表示根節(jié)點是葉子節(jié)點,返回1。
  3. 通過遞歸分別計算左子樹和右子樹的葉子節(jié)點個數(shù),并返回左子樹和右子樹的葉子節(jié)點個數(shù)之和。

代碼:

int BinaryTreeLeafSize(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}

	if (root->left == NULL && root->right == NULL)
	{
		return 1;
	}

	return BinaryTreeLeafSize(root->left) + BinaryTreeLeafSize(root->right);
}

5.3 二叉樹第k層節(jié)點個數(shù)

【代碼思路】:

  1. 判斷二叉樹是否為空,如果是則返回0。
  2. 判斷k是否等于1,如果是則返回1,表示當前層為第k層,只有一個節(jié)點。
  3. 如果以上條件都不滿足,則遞歸計算二叉樹的左子樹和右子樹的第k-1層節(jié)點個數(shù),然后將左右子樹的第k-1層節(jié)點個數(shù)相加,即為二叉樹第k層節(jié)點個數(shù)。

代碼:

int BinaryTreeLevelKSize(BTNode* root, int k)
{
	assert(k > 0);

	if (root == NULL)
	{
		return 0;
	}

	if (k == 1)
	{
		return 1;
	}

	return BinaryTreeLevelKSize(root->left, k - 1) + BinaryTreeLevelKSize(root->right, k - 1);
}

5.4 二叉樹查找值為x的節(jié)點

【代碼思路】:

  1. 如果當前節(jié)點為空,則返回空。
  2. 如果當前節(jié)點的值等于x,則返回當前節(jié)點。
  3. 否則,遞歸查找左子樹,如果找到則返回左子樹中的節(jié)點。
  4. 否則,遞歸查找右子樹,如果找到則返回右子樹中的節(jié)點。

代碼:

BTNode* BTreeFind(BTNode* root, BTDataType x)
{
	if (root == NULL)
		return NULL;

	if (root->data == x)
		return root;

	BTNode* ret1 = BTreeFind(root->left, x);
	if (ret1)
		return ret1;

	BTNode* ret2 = BTreeFind(root->right, x);
	if (ret2)
		return ret2;

	return NULL;
}

5.5 二叉樹的高度

【代碼思路】:

  1. 如果樹為空樹,則高度為0。
  2. 如果樹不為空樹,則高度為左子樹的高度和右子樹的高度中的較大值加1。
  3. 遞歸地計算左子樹和右子樹的高度,并取較大值。
  4. 返回左子樹和右子樹高度的較大值加1。

代碼:

int BinaryTreeHeight(BTNode* root)
{
	if (root == NULL)
	{
		return 0;
	}

	int LeftHeight = BinaryTreeHeight(root->left);
	int RightHeight = BinaryTreeHeight(root->right);
	return LeftHeight > RightHeight ? LeftHeight + 1 : RightHeight + 1;
}

六、二叉樹的創(chuàng)建和銷毀

6.1 構(gòu)建二叉樹

Tips: 構(gòu)建二叉樹的方式有很多, 這里我們通過前序遍組"ABD##E#H##CF##G##"構(gòu)建二叉樹。(‘#’表示空樹
【代碼思路】:

  1. 如果節(jié)點為“#”表示空,返回空。
  2. 遍歷創(chuàng)建左子樹,并和根節(jié)點鏈接。
  3. 遍歷創(chuàng)建右子樹,并和根節(jié)點鏈接。
  4. 返回根節(jié)點

代碼:

typedef int BTDataType;
typedef struct BinaryTreeNode//結(jié)構(gòu)體類型
{
    BTDataType data;
    struct BinaryTreeNode* left;
    struct BinaryTreeNode* right;
}BTNode;

//創(chuàng)建節(jié)點
BTNode* BuyNode(BTDataType x)
{
    BTNode* Node = (BTNode*)malloc(sizeof(BTNode));
    if (Node == NULL)
    {
        perror("malloc fail");
        exit(-1);
    }
    Node->data = x;
    Node->left = NULL;
    Node->right = NULL;
    return Node;
}

//先序創(chuàng)建二叉樹
BTNode* createrroot(char* a, int* pi)
{
    if (a[*pi] == '#')
    {
        (*pi)++;
        return NULL;
    }

    BTNode* root = BuyNode(a[*pi]);
    (*pi)++;

    root->left = createrroot(a, pi);
    root->right = createrroot(a, pi);
    return root;
}

6.2 二叉樹的銷毀

【代碼思路】:

  1. 從根節(jié)點開始,遞歸地銷毀左子樹。
  2. 從根節(jié)點開始,遞歸地銷毀右子樹。
  3. 將根節(jié)點從內(nèi)存中刪除。

代碼:

void BinaryTreeDestroy(BTNode* root)
{
	if (root == NULL)
		return;
	BinaryTreeDestory(root->left);
	BinaryTreeDestory(root->right);
	free(root);
}

6.3 判斷二叉樹是否為完全二叉樹

(博主數(shù)據(jù)結(jié)構(gòu)初階是用C語言來實現(xiàn)的,所以此處直接棧代碼從博主代碼倉庫中拷貝過來的,讀者可以用其他語言來實現(xiàn),大同小異)

【代碼思路】:

  1. 遍歷二叉樹,使用層次遍歷的方式,從根節(jié)點開始,逐層遍歷每個節(jié)點。
  2. 當遇到第一顆空樹時停止遍歷。
  3. 從第一顆空樹開始,后續(xù)節(jié)點如果有非空就不是完全二叉樹,否則為完全二叉樹。

棧相關(guān)代碼自行查看:棧和隊列代碼實現(xiàn)
代碼:

int BinaryTreeComplete(BTNode* root)
{
    Que q;
    QueueInit(&q);

    if (root)
        QueuePush(&q, root);

    while (!QueueEmpty(&q))
    {
        BTNode* front = QueueFront(&q);
        QueuePop(&q);

        //遇空就跳過
        if (front==NULL)
        {
            break;
        }

        QueuePush(&q, root->left);
        QueuePush(&q, root->right);
    }

    //檢查后續(xù)節(jié)點是否有非空
    //有非空就不是完全二叉樹
    while (!QueueEmpty(&q))
    {
        BTNode* front = QueueFront(&q);
        QueuePop(&q);
        if (front)
        {
            QueueDestroy(&q);
            return false;
        }
    }
    QueueDestroy(&q);
    return true;
}

【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法
【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典),數(shù)據(jù)結(jié)構(gòu)和C++學習分享,數(shù)據(jù)結(jié)構(gòu),算法,c++,c語言,鏈表,排序算法
【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹順序結(jié)構(gòu): 堆及實現(xiàn)(全程配圖,非常經(jīng)典)文章來源地址http://www.zghlxwxcb.cn/news/detail-676784.html

到了這里,關(guān)于【數(shù)據(jù)結(jié)構(gòu)入門指南】二叉樹鏈式結(jié)構(gòu)的實現(xiàn)(保姆級代碼思路解讀,非常經(jīng)典)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)入門指南:順序表

    數(shù)據(jù)結(jié)構(gòu)入門指南:順序表

    目錄 文章目錄 前言 順序表 靜態(tài)順序表 動態(tài)順序表 總結(jié) ????????今天我們正式進入對數(shù)據(jù)結(jié)構(gòu)的學習,順序表是數(shù)據(jù)結(jié)構(gòu)中最簡單的一種線性數(shù)據(jù)結(jié)構(gòu),也是數(shù)據(jù)結(jié)構(gòu)入門的試金石,如果對于順序表中內(nèi)容理解過難,可以先填補一下C語言中結(jié)構(gòu)體、動態(tài)內(nèi)存管理及指針

    2024年02月15日
    瀏覽(21)
  • 【數(shù)據(jù)結(jié)構(gòu)入門指南】單鏈表

    【數(shù)據(jù)結(jié)構(gòu)入門指南】單鏈表

    ?由于順序表插入和刪除元素需要移動大量數(shù)據(jù),導(dǎo)致運行效率下降。因此引入了另一種數(shù)據(jù)結(jié)構(gòu) —— 鏈表 。鏈表又分為單鏈表和雙鏈表。單鏈表結(jié)構(gòu)簡單,一般不會單獨用來存數(shù)據(jù)。實際中更多是作為其他數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),如哈希桶、圖的鄰接表等等。另外這種結(jié)構(gòu)在

    2024年02月14日
    瀏覽(25)
  • C語言筆記 | 數(shù)據(jù)結(jié)構(gòu)入門指南

    文章目錄 0x00 前言 0x01 百雞百錢 0x1 題目描述 0x2 問題分析 0x3 代碼設(shè)計 0x4 完整代碼 0x5 運行效果 0x6 舉一反三 [兔雞百錢] 0x02 借書方案知多少 0x1 題目描述 0x2 問題分析 0x3 代碼設(shè)計 0x4 完整代碼 0x5 運行效果 0x6 舉一反三 [領(lǐng)導(dǎo)小組方案] 0x03 打魚還是曬網(wǎng) 0x1 題目描述 0x2 問題分

    2024年02月08日
    瀏覽(29)
  • 數(shù)據(jù)結(jié)構(gòu)入門指南:單鏈表(附源碼)

    數(shù)據(jù)結(jié)構(gòu)入門指南:單鏈表(附源碼)

    目錄 前言 尾刪 頭刪 查找 位置前插入 ?位置后插入 ?位置刪除 ?位置后刪除 ?鏈表銷毀 總結(jié) ? ? ? ? 前邊關(guān)于鏈表的基礎(chǔ)如果已經(jīng)理解透徹,那么接下來就是對鏈表各功能的實現(xiàn),同時也希望大家能把這部分內(nèi)容熟練于心,這部分內(nèi)容對有關(guān)鏈表部分的刷題很有幫助。廢話

    2024年02月14日
    瀏覽(28)
  • Python基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)入門必讀指南

    Python基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)入門必讀指南

    作者主頁:濤哥聊Python 個人網(wǎng)站:濤哥聊Python 大家好,我是濤哥,今天為大家分享的是Python中常見的數(shù)據(jù)結(jié)構(gòu)。 含義:數(shù)組是一種有序的數(shù)據(jù)結(jié)構(gòu),其中的元素可以按照索引來訪問。數(shù)組的大小通常是固定的,一旦創(chuàng)建就不能更改。 基本操作: 含義:列表是Python中內(nèi)置的

    2024年02月07日
    瀏覽(52)
  • 數(shù)據(jù)結(jié)構(gòu)入門指南:帶頭雙向循環(huán)鏈表

    數(shù)據(jù)結(jié)構(gòu)入門指南:帶頭雙向循環(huán)鏈表

    目錄 文章目錄 前言 1.結(jié)構(gòu)與優(yōu)勢 2.鏈表實現(xiàn)? ? ?? 2.1 定義鏈表 2.2 創(chuàng)建頭節(jié)點 2.3 尾插 2.4 輸出鏈表 2.5 尾刪 2.6 頭插 2.7頭刪 2.8?節(jié)點個數(shù) 2.9?查找 2.10?位置插入 2.11 位置刪除 2.12 銷毀鏈表 ?3. 源碼 總結(jié) ? ? ? ? 鏈表一共有8種結(jié)構(gòu),但最常用的就是無頭單向鏈表、和帶頭

    2024年02月14日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】二叉樹基礎(chǔ)入門

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

    ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???? ?? ?? ?? 個人主頁 :阿然成長日記 ??點擊可跳轉(zhuǎn) ?? 個人專欄: ??數(shù)據(jù)結(jié)構(gòu)與算法??C語言進階 ?? 不能則學,不知則問,恥于問人,決無長進 ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? 一棵二叉樹是結(jié)點的

    2024年02月09日
    瀏覽(24)
  • 數(shù)據(jù)結(jié)構(gòu)入門 — 二叉樹的概念、性質(zhì)及結(jié)構(gòu)

    數(shù)據(jù)結(jié)構(gòu)入門 — 二叉樹的概念、性質(zhì)及結(jié)構(gòu)

    本文屬于數(shù)據(jù)結(jié)構(gòu)專欄文章,適合數(shù)據(jù)結(jié)構(gòu)入門者學習,涵蓋數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)的知識和內(nèi)容體系,文章在介紹數(shù)據(jù)結(jié)構(gòu)時會配合上 動圖演示 ,方便初學者在學習數(shù)據(jù)結(jié)構(gòu)時理解和學習,了解數(shù)據(jù)結(jié)構(gòu)系列專欄點擊下方鏈接。 博客主頁:Duck Bro 博客主頁 系列專欄:數(shù)據(jù)結(jié)構(gòu)專欄

    2024年02月07日
    瀏覽(24)
  • 【Java--數(shù)據(jù)結(jié)構(gòu)】提升你的編程段位:泛型入門指南,一看就會!

    【Java--數(shù)據(jù)結(jié)構(gòu)】提升你的編程段位:泛型入門指南,一看就會!

    泛型是一種編程概念,它允許我們編寫可以適用于多種數(shù)據(jù)類型的代碼。通過使用泛型,我們可以在編譯時期將具體的 數(shù)據(jù)類型作為參數(shù) 傳遞給代碼,從而實現(xiàn)代碼 的復(fù)用和靈活性 。 在傳統(tǒng)的編程中,我們通常需要為不同的數(shù)據(jù)類型編寫不同的代碼,這樣會導(dǎo)致代碼冗余

    2024年04月26日
    瀏覽(35)
  • 數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    數(shù)據(jù)結(jié)構(gòu)入門(C語言版)二叉樹概念及結(jié)構(gòu)(入門)

    1.1 樹的概念 樹是一種非線性的數(shù)據(jù)結(jié)構(gòu),它是由n(n=0)個有限結(jié)點組成一個具有層次關(guān)系的集合。把它叫做樹是因為它看起來像一棵倒掛的樹,也就是說它是根朝上,而葉朝下的。 ☆有一個特殊的結(jié)點,稱為根結(jié)點,根節(jié)點沒有前驅(qū)結(jié)點 ☆除根節(jié)點外,其余結(jié)點被分成M

    2023年04月14日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包