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

這是關(guān)于“樹(shù)先生“的故事

這篇具有很好參考價(jià)值的文章主要介紹了這是關(guān)于“樹(shù)先生“的故事。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。


這是關(guān)于“樹(shù)先生“的故事


《數(shù)據(jù)結(jié)構(gòu)專(zhuān)欄》



一、認(rèn)識(shí)樹(shù)結(jié)構(gòu)

樹(shù)的定義:樹(shù)是指由N(N>=0)個(gè)有限結(jié)點(diǎn)組成的具有層次性關(guān)系的集合,是一種簡(jiǎn)單的非線性結(jié)構(gòu)。當(dāng)N=0時(shí),稱(chēng)為空樹(shù)。

如何遍歷樹(shù)

前序遍歷
這是關(guān)于“樹(shù)先生“的故事

中序遍歷
這是關(guān)于“樹(shù)先生“的故事

后序遍歷
這是關(guān)于“樹(shù)先生“的故事

對(duì)于前中后序遍歷使用的是根節(jié)點(diǎn)的位置決定前中序。

層序遍歷

對(duì)于層序來(lái)說(shuō)就是一層一層的進(jìn)行遍歷,由上面一層的根節(jié)遍歷后帶入下一層的節(jié)點(diǎn)數(shù)據(jù)??梢允褂靡粋€(gè)輔助隊(duì)列的容器來(lái)實(shí)現(xiàn)對(duì)于層序遍歷。
這是關(guān)于“樹(shù)先生“的故事
代碼實(shí)現(xiàn)

//層序遍歷
void BinaryTreeLevelOrder(BTNode* root)
{
	Queue qu;
	BTNode* cur;

	QueueInit(&qu);

	QueuePush(&qu, root);

	while (! QueueEmpty(&qu))
	{
		cur = QueueFront(&qu);

		putchar(cur->_data);

		if (cur->_left)
		{
			QueuePush(&qu, cur->_left);
		}

		if (cur->_right)
		{
			QueuePush(&qu, cur->_right);
		}

		QueuePop(&qu);
	}

	QueueDestory(&qu);
}

如何創(chuàng)建一個(gè)樹(shù)?

對(duì)于二叉樹(shù)的遍歷就是前、中、后序遍歷。對(duì)于前序和后序遍歷可以快速的找到根節(jié)點(diǎn)。然后通過(guò)中序分辨出左右子樹(shù)。實(shí)現(xiàn)對(duì)于樹(shù)的構(gòu)建。

編一個(gè)程序,讀入用戶輸入的一串先序遍歷字符串,根據(jù)此字符串建立一個(gè)二叉樹(shù)(以指針?lè)绞酱鎯?chǔ))。 例如如下的先序遍歷字符串: ABC##DE#G##F### 其中“#”表示的是空格,空格字符代表空樹(shù)。建立起此二叉樹(shù)以后,再對(duì)二叉樹(shù)進(jìn)行中序遍歷,輸出遍歷結(jié)果。
輸入:abc ## de #g ## f ###
輸出:c b e g d f a

構(gòu)建樹(shù)
這是關(guān)于“樹(shù)先生“的故事
輸入時(shí)是一個(gè)數(shù)組來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ)的,所以在建立樹(shù)的節(jié)點(diǎn)時(shí)就需要使用一個(gè)數(shù)據(jù)記錄數(shù)組下標(biāo)。
這是關(guān)于“樹(shù)先生“的故事
避免在遞歸時(shí)數(shù)組的下標(biāo)使用后,返回下標(biāo)重置,這里需要保持?jǐn)?shù)組下標(biāo)一致向后走,遞歸出來(lái)后才會(huì)對(duì)于整個(gè)數(shù)組遍歷。使用的一個(gè)前序思想建樹(shù)。

typedef  struct TreeNode
{
    struct TreeNode* left;
    struct TreeNode* right;
    char val;
}TreeNode;

TreeNode* makeTree(char* arr,int *count)
{
    if(arr[*count]=='#'||arr[*count]==' ')
    {
        return NULL;
    }

    TreeNode* newnode=(TreeNode*)malloc(sizeof(TreeNode));
    newnode->val=arr[(*count)++];

    newnode->left=makeTree(arr, count);
    (*count)++;
    newnode->right=makeTree(arr, count);

    return newnode;
}

void InOrder(TreeNode*root)
{
    if(root==NULL)
    return ;

    InOrder(root->left);
    printf("%c ",root->val);
    InOrder(root->right);
}

int main()
{

    char arr[101];
    scanf("%s",arr);
    int count=0;
    TreeNode*tree=makeTree(arr, &count);
    InOrder(tree);
    return 0;
}

如何判斷一顆樹(shù)是否是完全二叉樹(shù)?

這是關(guān)于“樹(shù)先生“的故事
通過(guò)對(duì)于滿二叉樹(shù)和完全二叉樹(shù)的對(duì)比發(fā)現(xiàn)完全二叉樹(shù)的底層葉子結(jié)點(diǎn)數(shù)目是從左向右依次遞減的,所以高度為n-1層的數(shù)目是不變的滿二叉樹(shù)一樣,對(duì)于完全二叉樹(shù)的最后一層進(jìn)行分析即可。

對(duì)于具有n個(gè)結(jié)點(diǎn)的完全二叉樹(shù),如果按照從上至下從左至右的數(shù)組順序?qū)λ泄?jié)點(diǎn)從0開(kāi)始編號(hào),則對(duì)
于序號(hào)為i的結(jié)點(diǎn)有:

  1. 若i>0,i位置節(jié)點(diǎn)的雙親序號(hào):(i-1)/2;i=0,i為根節(jié)點(diǎn)編號(hào),無(wú)雙親節(jié)點(diǎn)
  2. 若2i+1<n,左孩子序號(hào):2i+1,2i+1>=n否則無(wú)左孩子
  3. 若2i+2<n,右孩子序號(hào):2i+2,2i+2>=n否則無(wú)右孩子

代碼實(shí)現(xiàn)

int BinaryTreeComplete(BTNode* root)
{
	Queue qu;
	BTNode* cur;
	int tag = 0;

	QueueInit(&qu);

	QueuePush(&qu, root);

	while (! QueueEmpty(&qu))
	{
		cur = QueueFront(&qu);

		putchar(cur->_data);

		if (cur->_right && !cur->_left)
		{
			return 0;
		}

		if (tag && (cur->_right || cur->_left))
		{
			return 0;
		}

		if (cur->_left)
		{
			QueuePush(&qu, cur->_left);
		}

		if (cur->_right)
		{
			QueuePush(&qu, cur->_right);
		}
		else
		{
			tag = 1;
		}

		QueuePop(&qu);
	}

	BinaryTreeDestory(&qu);
	return 1;
}

二、樹(shù)的簡(jiǎn)單算法——遞歸

1.相同樹(shù)

給你兩棵二叉樹(shù)的根節(jié)點(diǎn) p 和 q ,編寫(xiě)一個(gè)函數(shù)來(lái)檢驗(yàn)這兩棵樹(shù)是否相同。 如果兩個(gè)樹(shù)在結(jié)構(gòu)上相同,并且節(jié)點(diǎn)具有相同的值,則認(rèn)為它們是相同的
這是關(guān)于“樹(shù)先生“的故事

對(duì)于題目講解的相同理解應(yīng)該是節(jié)點(diǎn)數(shù)據(jù)相同的數(shù)據(jù),且左右子樹(shù)結(jié)構(gòu)也是相同的,對(duì)于空樹(shù)的判斷應(yīng)該也要討論,其中一顆樹(shù)為空,另外一顆樹(shù)不為空就明顯不是相同的數(shù)。對(duì)于判斷條件就是val值,左右子樹(shù)結(jié)構(gòu),是否同時(shí)為空(判斷是否都是葉子結(jié)點(diǎn))。

class Solution {
public:
    bool isSameTree(TreeNode* p, TreeNode* q) {
        if(p==nullptr&&q==nullptr)return true;
        
        if(p==nullptr||q==nullptr)return false;

       if(q->val!=p->val)return false;


        return isSameTree(q->left,p->left)&&isSameTree(q->right,p->right);
    }
};

2.鏡像樹(shù)

給你一個(gè)二叉樹(shù)的根節(jié)點(diǎn) root , 檢查它是否軸對(duì)稱(chēng)
這是關(guān)于“樹(shù)先生“的故事

鏡像樹(shù)和解法有些類(lèi)似于上面的相同樹(shù),但是又有些許差別就是對(duì)于樹(shù)的結(jié)構(gòu)比較他們是左子樹(shù)和右子樹(shù)的是對(duì)稱(chēng)的,使用的相同樹(shù)的邏輯解題。

class Solution {
public:
    bool issametree(TreeNode* root,TreeNode* subroot)
    {
        if(root==nullptr && subroot==nullptr)
        {
            return true;
        }
        if(root==nullptr || subroot==nullptr)
        {
            return false;
        }
         
        if(root->val==subroot->val)
        {
            return issametree(root->left,subroot->right) && issametree(root->right,subroot->left);
        }
        else
        {
            return false;
        }
    }
    bool isSymmetric(TreeNode* root) {
        if(root==nullptr) return true;
        return issametree(root->left,root->right);
    }
};

3.單值二叉樹(shù)

題目: 如果二叉樹(shù)每個(gè)節(jié)點(diǎn)都具有相同的值,那么該二叉樹(shù)就是單值二叉樹(shù)。 只有給定的樹(shù)是單值二叉樹(shù)時(shí),才返回 true;否則返回 false。
這是關(guān)于“樹(shù)先生“的故事

對(duì)于二叉樹(shù)中值的查找值是一個(gè)比較常用的算法,使用深度遍歷,從左子樹(shù)到后面右子樹(shù)依次遍歷。不能使用節(jié)點(diǎn)數(shù)據(jù)相加后對(duì)比左右子樹(shù)。會(huì)存在左邊是多節(jié)點(diǎn),右邊只有一個(gè)節(jié)點(diǎn)數(shù)據(jù)。但是左右子樹(shù)的值依舊相等。所以需要從根得va來(lái)比較判斷左右子樹(shù)。

class Solution {
public:
    bool isUnivalTree(TreeNode* root) {
        if(root==nullptr)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);
    }
};

總結(jié)

樹(shù)的結(jié)構(gòu)使用遞歸算法來(lái)進(jìn)行遍歷很容易理解,但是對(duì)于深度太深的樹(shù)就會(huì)出現(xiàn)棧溢出情況。樹(shù)用來(lái)存儲(chǔ)數(shù)據(jù)顯然不是一個(gè)很好的選擇,容易出現(xiàn)歪脖子樹(shù),單只樹(shù)。效率不高。可以進(jìn)行后期優(yōu)化成為搜索二叉樹(shù),AVL樹(shù)……文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-451851.html

到了這里,關(guān)于這是關(guān)于“樹(shù)先生“的故事的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【JavaSE專(zhuān)欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    【JavaSE專(zhuān)欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    作者主頁(yè) :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開(kāi)發(fā)經(jīng)驗(yàn),專(zhuān)注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 XML 的概念,以及 Java 中 XML 和字符串的轉(zhuǎn)換方法,并給出了樣例代碼。

    2024年02月09日
    瀏覽(32)
  • 【Java程序員面試專(zhuān)欄 數(shù)據(jù)結(jié)構(gòu)】四 高頻面試算法題:哈希表

    【Java程序員面試專(zhuān)欄 數(shù)據(jù)結(jié)構(gòu)】四 高頻面試算法題:哈希表

    一輪的算法訓(xùn)練完成后,對(duì)相關(guān)的題目有了一個(gè)初步理解了,接下來(lái)進(jìn)行專(zhuān)題訓(xùn)練,以下這些題目就是匯總的高頻題目,一個(gè)O(1)查找的利器哈希表,所以放到一篇Blog中集中練習(xí) 題目 解題思路 時(shí)間 空間 兩數(shù)之和 輔助哈希 使用map存儲(chǔ)出現(xiàn)過(guò)的值,key為值大小,v

    2024年02月22日
    瀏覽(29)
  • 【JavaSE專(zhuān)欄48】Java集合類(lèi)ArrayList解析,這個(gè)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)你了解嗎?

    【JavaSE專(zhuān)欄48】Java集合類(lèi)ArrayList解析,這個(gè)動(dòng)態(tài)數(shù)組數(shù)據(jù)結(jié)構(gòu)你了解嗎?

    作者主頁(yè) :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開(kāi)發(fā)經(jīng)驗(yàn),專(zhuān)注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 Java 中集合類(lèi) ArrayList 的語(yǔ)法、使用說(shuō)明和應(yīng)用場(chǎng)景,并給出了樣例代碼。

    2024年02月16日
    瀏覽(27)
  • 【JavaSE專(zhuān)欄55】Java集合類(lèi)HashTable解析,基于哈希表實(shí)現(xiàn)的唯一性鍵值對(duì)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)

    【JavaSE專(zhuān)欄55】Java集合類(lèi)HashTable解析,基于哈希表實(shí)現(xiàn)的唯一性鍵值對(duì)存儲(chǔ)數(shù)據(jù)結(jié)構(gòu)

    作者主頁(yè) :Designer 小鄭 作者簡(jiǎn)介 :3年JAVA全棧開(kāi)發(fā)經(jīng)驗(yàn),專(zhuān)注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 Java 中集合類(lèi) HashTable 的語(yǔ)法、使用說(shuō)明和應(yīng)用場(chǎng)景,并給出了樣例代碼。

    2024年02月15日
    瀏覽(27)
  • 關(guān)于對(duì)索引底層數(shù)據(jù)結(jié)構(gòu)的理解

    關(guān)于對(duì)索引底層數(shù)據(jù)結(jié)構(gòu)的理解

    目錄 我們?cè)谡務(wù)撍饕讓拥臄?shù)據(jù)結(jié)構(gòu)之前,我們不妨先想一下索引是什么以及索引存在的作用 Hash 二叉搜索樹(shù)與二叉平衡樹(shù) 多叉平衡查找樹(shù)(B樹(shù)) B+樹(shù) 索引:是一種特殊的文件,包含著對(duì)數(shù)據(jù)庫(kù)表中所有記錄的引用指針,而其的作用也體現(xiàn)的很明確了,我們通過(guò)創(chuàng)建索引來(lái)

    2024年02月09日
    瀏覽(23)
  • 【數(shù)據(jù)結(jié)構(gòu)】關(guān)于排序你應(yīng)該知道的一切(下)

    【數(shù)據(jù)結(jié)構(gòu)】關(guān)于排序你應(yīng)該知道的一切(下)

    和光同塵_我的個(gè)人主頁(yè) 單程孤舟,出云入霞,如歌如吟。 --門(mén)孔 啊還是國(guó)慶快樂(lè)!上節(jié)介紹了較為簡(jiǎn)單的插入排序、選擇排序,今天我們上強(qiáng)度,學(xué)習(xí)交換排序、歸并排序還有計(jì)數(shù)排序,開(kāi)沖?? 2.1.1. 基本思想 關(guān)于冒泡排序我們?cè)贑語(yǔ)言的學(xué)習(xí)中就有涉及 依次比較序列中相

    2024年02月05日
    瀏覽(19)
  • 數(shù)據(jù)結(jié)構(gòu):關(guān)于時(shí)間復(fù)雜度的例題計(jì)算

    數(shù)據(jù)結(jié)構(gòu):關(guān)于時(shí)間復(fù)雜度的例題計(jì)算

    該程序,最上面的嵌套循環(huán)里,i每執(zhí)行一次,j就執(zhí)行N次,所以嵌套循環(huán)執(zhí)行次數(shù)為N*N次;中間的k變量循環(huán)了2*N次;最后M變量循環(huán)10次。所以總共執(zhí)行了 N*N+2*N+10 次! 所以該程序時(shí)間復(fù)雜度為 O(N 2 ) 。 該程序,上面的for循環(huán)執(zhí)行了2*N次,下面的M循環(huán)了10次。所以該時(shí)間復(fù)雜

    2024年02月07日
    瀏覽(19)
  • 【數(shù)據(jù)結(jié)構(gòu)】-關(guān)于樹(shù)的概念和性質(zhì)你了解多少??

    【數(shù)據(jù)結(jié)構(gòu)】-關(guān)于樹(shù)的概念和性質(zhì)你了解多少??

    作者:小樹(shù)苗渴望變成參天大樹(shù) 作者宣言:認(rèn)真寫(xiě)好每一篇博客 作者gitee:gitee 如 果 你 喜 歡 作 者 的 文 章 ,就 給 作 者 點(diǎn) 點(diǎn) 關(guān) 注 吧! 今天我們來(lái)講一講非線性的一種數(shù)據(jù)結(jié)構(gòu),大家肯定對(duì)這種結(jié)構(gòu)充滿好奇和不解,今天我就帶大家來(lái)解決這個(gè)問(wèn)題,我所將的是樹(shù)以及

    2024年02月02日
    瀏覽(16)
  • [C語(yǔ)言實(shí)現(xiàn)]數(shù)據(jù)結(jié)構(gòu)之《關(guān)于我轉(zhuǎn)生成隊(duì)列這檔事》

    [C語(yǔ)言實(shí)現(xiàn)]數(shù)據(jù)結(jié)構(gòu)之《關(guān)于我轉(zhuǎn)生成隊(duì)列這檔事》

    ??作者: FlashRider ??專(zhuān)欄:?數(shù)據(jù)結(jié)構(gòu) ??知識(shí)概要:詳解 隊(duì)列 的概念、順序隊(duì)列和鏈?zhǔn)疥?duì)列的優(yōu)點(diǎn)和缺點(diǎn),以及代碼實(shí)現(xiàn)。 目錄 什么是隊(duì)列? 選擇什么結(jié)構(gòu)來(lái)實(shí)現(xiàn)隊(duì)列? 鏈?zhǔn)疥?duì)列的實(shí)現(xiàn) 隊(duì)列的結(jié)構(gòu)體實(shí)現(xiàn) 隊(duì)列需要的函數(shù)聲明 隊(duì)列的函數(shù)實(shí)現(xiàn) 測(cè)試代碼 隊(duì)列其實(shí)就是一種操

    2024年02月09日
    瀏覽(14)
  • 【Redis】關(guān)于Redis數(shù)據(jù)結(jié)構(gòu)簡(jiǎn)單動(dòng)態(tài)字符串(SDS)的一些雜記

    推薦幾篇關(guān)于SDS數(shù)據(jù)結(jié)構(gòu)講解較為詳細(xì)的文章: 一、簡(jiǎn)單動(dòng)態(tài)字符串 — Redis 設(shè)計(jì)與實(shí)現(xiàn) (redisbook.readthedocs.io) 二、深入理解Redis之簡(jiǎn)單動(dòng)態(tài)字符串 - itbsl - 博客園 (cnblogs.com) 三、Redis內(nèi)部數(shù)據(jù)結(jié)構(gòu)詳解(2)——sds - 鐵蕾的個(gè)人博客 (zhangtielei.com) 四、簡(jiǎn)單動(dòng)態(tài)字符串 — Redis 設(shè)計(jì)與

    2023年04月14日
    瀏覽(22)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包