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

數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):P3-樹(上)----編程作業(yè)02:List Leaves

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

本系列文章為浙江大學(xué)陳越、何欽銘數(shù)據(jù)結(jié)構(gòu)學(xué)習(xí)筆記,系列文章鏈接如下

數(shù)據(jù)結(jié)構(gòu)(陳越、何欽銘)學(xué)習(xí)筆記


一、題目描述

題目描述: 給定一棵樹,按照從上到下、從左到右的順序列出所有葉結(jié)點。
輸入格式: 每個輸入文件包含一個測試用例。對于每種情況,第一行給出一個正整數(shù)N(≤10),為樹中的結(jié)點總數(shù),結(jié)點編號從0到N-1。接著是N行,每一行對應(yīng)一個結(jié)點,并給出該結(jié)點的左、右子結(jié)點的索引。如果子結(jié)點不存在,則在相應(yīng)位置上給出“-”。任何一對子結(jié)點都用一個空格隔開。
輸出格式: 對于每個測試用例,在一行中按從上到下、從左到右的順序打印所有的葉結(jié)點索引。相鄰數(shù)字之間必須有一個空格,行尾不能有多余的空格。
輸入樣例:
8
1 -
- -
0 -
2 7
- -
- -
5 -
4 6
輸出樣例:
4 1 5

二、整體思路與實現(xiàn)代碼

思路分析

①建樹:讀取各個節(jié)點,存放在一個數(shù)組中,建立一棵樹。
②找到這棵樹的根節(jié)點:把數(shù)組從頭到尾掃描一遍,然后看看有沒有哪個結(jié)點不存在其他結(jié)點指向他。如果沒人指向他,他就是根結(jié)點了,非根結(jié)點肯定有人指向他了。
③層序輸出葉節(jié)點:層序輸出在前面文章已經(jīng)將講解過,首先將根結(jié)點入隊,然后開始執(zhí)行循環(huán):結(jié)點出隊、訪問該結(jié)點、其左右兒子入隊。在此基礎(chǔ)上,我們加上對節(jié)點屬性的判定,如果是葉子節(jié)點則將節(jié)點編號保存在一個數(shù)組中。最后通過便利保存節(jié)點編號的數(shù)組,將葉子節(jié)點編號輸出。

整體代碼

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define MaxTree 10
#define Null -1    //子樹為空時定義為Null
#define Tree int

//定義樹節(jié)點
struct TreeNode {
	Tree left;   //左子樹的下標(biāo) 
	Tree right;  //右子樹的下標(biāo) 
}T[MaxTree];

//定義一個隊列,用于中序遍歷時進(jìn)行入隊出隊操作
struct Queue {
	Tree data[MaxTree];  //保存Tree節(jié)點
	int front;  //隊首
	int rear;   //隊尾
}Q;

//建立一棵樹,并返回根節(jié)點
Tree BuildTree(struct TreeNode T[])
{
	int n;    //輸入n個節(jié)點
	int i;    
	Tree Root; //最后找到的根節(jié)點
	int check[MaxTree]; //記錄當(dāng)前各個節(jié)點是否已訪問
	char cl, cr;        //保存輸入的左、右節(jié)點
	scanf("%d", &n); //輸入的n
	getchar();//讀取回車
	if (n) {
		for (i = 0; i < n; i++) check[i] = 0; //初始化各個節(jié)點均未被訪問
		for (i = 0; i < n; i++) {		
			scanf("%c %c", &cl, &cr); //輸入的左、右節(jié)點
			getchar();//讀取回車	
			/*對cl的對應(yīng)處理 */
			if (cl != '-') {
				T[i].left = cl - '0';
				check[T[i].left] = 1;
			}
			else T[i].left = Null;
			/*對cr的對應(yīng)處理 */
			if (cr != '-') {
				T[i].right = cr - '0';
				check[T[i].right] = 1;
			}
			else T[i].right = Null;
		}
		//n個節(jié)點中沒有被check的就是根節(jié)點
		for (i = 0; i < n; i++)
			if (!check[i]) break;
		Root = i;
	}

	return Root;
}

void LevelOrderTraversal(Tree root)
{
	if (!root) return;     //若是空樹則直接返回
	Tree leaves[MaxTree];  //保存葉子節(jié)點

	/*初始化隊列 根結(jié)點放到隊列里面去*/
	Q.front = -1;
	Q.rear = -1;
	Q.data[++Q.rear] = root;
	int t = 0; //用于記錄葉節(jié)點數(shù)量
	/*
	然后接下來是一個循環(huán)
	循環(huán)做三件事情:
	第一件事情 從隊列里面拋出一個元素
	第二件事情 把隊列剛拋出元素的Data print出來
	第三件事情 是把它的左右兒子放到隊列里去
	*/
	while (Q.front != Q.rear) {	 //隊列不為空時
		int i = Q.data[++Q.front];	 //出隊
		if (T[i].left == Null && T[i].right == Null) { //葉節(jié)點
			leaves[t++] = i;
		}
		else { //非葉節(jié)點,左右子樹若存在就入隊
			if(T[i].left != Null)
				Q.data[++Q.rear] = T[i].left;
			if (T[i].right != Null)
				Q.data[++Q.rear] = T[i].right;
		}		
	}
	
	//實現(xiàn)最后一個節(jié)點后面沒有空格,其它節(jié)點后面有空格
	for (int i = 0; i < t; i++) {
		if(i < t - 1)
			printf("%d ", leaves[i]);
		else
			printf("%d", leaves[i]);
	}
}

int main()
{
	Tree A = BuildTree(T);
	LevelOrderTraversal(A);

	return 0;
}

運行,輸入測試樣例,結(jié)果正確
數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):P3-樹(上)----編程作業(yè)02:List Leaves,數(shù)據(jù)結(jié)構(gòu)基礎(chǔ),數(shù)據(jù)結(jié)構(gòu),list,算法,c語言,b樹文章來源地址http://www.zghlxwxcb.cn/news/detail-672828.html

到了這里,關(guān)于數(shù)據(jù)結(jié)構(gòu)基礎(chǔ):P3-樹(上)----編程作業(yè)02:List Leaves的文章就介紹完了。如果您還想了解更多內(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ìn)行投訴反饋,一經(jīng)查實,立即刪除!

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

相關(guān)文章

  • Java 學(xué)習(xí)路線:基礎(chǔ)知識、數(shù)據(jù)類型、條件語句、函數(shù)、循環(huán)、異常處理、數(shù)據(jù)結(jié)構(gòu)、面向?qū)ο缶幊獭?、文件?API

    Java 是一種由 Sun Microsystems 于 1995 年首次發(fā)布的編程語言和計算平臺。Java 是一種通用的、基于類的、面向?qū)ο蟮木幊陶Z言,旨在減少實現(xiàn)依賴性。它是一個應(yīng)用程序開發(fā)的計算平臺。Java 快速、安全、可靠,因此在筆記本電腦、數(shù)據(jù)中心、游戲機、科學(xué)超級計算機、手機等領(lǐng)

    2024年03月24日
    瀏覽(39)
  • 《數(shù)據(jù)結(jié)構(gòu)》_PTA_數(shù)據(jù)結(jié)構(gòu)作業(yè)6:圖

    《數(shù)據(jù)結(jié)構(gòu)》_PTA_數(shù)據(jù)結(jié)構(gòu)作業(yè)6:圖

    1-1 無向連通圖所有頂點的度之和為偶數(shù)。 T 1-2 無向連通圖邊數(shù)一定大于頂點個數(shù)減1 F 1-3 無向連通圖至少有一個頂點的度為1。 F 1-4 用鄰接表法存儲圖,占用的存儲空間數(shù)只與圖中結(jié)點個數(shù)有關(guān),而與邊數(shù)無關(guān). F 1-5 用鄰接矩陣法存儲圖,占用的存儲空間數(shù)只與圖中結(jié)點個數(shù)

    2024年02月04日
    瀏覽(61)
  • 數(shù)據(jù)結(jié)構(gòu)——線性表作業(yè)

    數(shù)據(jù)結(jié)構(gòu)——線性表作業(yè)

    目錄 選擇題和填空題 編程題 1. 輸出單鏈表倒數(shù)第K個結(jié)點值 單鏈表 雙指針 2. 數(shù)組元素移動 3. 多項式相加 4. 數(shù)組的循環(huán)左移 【問題描述】 輸入一個單向鏈表,輸出該鏈表中倒數(shù)第k個結(jié)點,鏈表的最后一個結(jié)點是倒數(shù)第1個節(jié)點。 【輸入形式】 輸入第一位為K值,其后接一串

    2024年02月08日
    瀏覽(21)
  • 02-BTC-數(shù)據(jù)結(jié)構(gòu)

    提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 目錄 前言 二、區(qū)塊鏈 三、Merkel tree 總結(jié) ? ? 今天看了北大肖臻老師《區(qū)塊鏈技術(shù)與應(yīng)用》公開課,有很大收獲,在此寫博客以做筆記,加深印象,若有不當(dāng)之處,歡迎斧正。 一、比特幣中的數(shù)據(jù)結(jié)構(gòu)

    2024年01月19日
    瀏覽(13)
  • 《大話數(shù)據(jù)結(jié)構(gòu)》02 算法

    《大話數(shù)據(jù)結(jié)構(gòu)》02 算法

    算法是解決特定問題求解步驟的描述,在計算機中表現(xiàn)為指令的有限序列,并且每條指令表示一個或多個操作。 大家都已經(jīng)學(xué)過一門計算機語言,不管學(xué)的是哪一種,學(xué)得好不好,好歹是可以寫點小程序了?,F(xiàn)在我要求你寫一個求1+2+3+……+100結(jié)果的程序,你應(yīng)該怎么寫呢?

    2024年04月17日
    瀏覽(22)
  • 02-鏈表 (數(shù)據(jù)結(jié)構(gòu)和算法)

    3.1 鏈表的基本概念 前面我們在學(xué)習(xí)順序表時,線性表的順序存儲結(jié)構(gòu)的特點是邏輯關(guān)系上相鄰的兩個數(shù)據(jù)元素在物理位置上也是相鄰的。我們會發(fā)現(xiàn)雖然順序表的查詢很快,時間復(fù)雜度為O(1),但是增刪的效率是比較低的,因為每一次增刪操作都伴隨著大量的數(shù)據(jù)元素移動。為

    2024年02月16日
    瀏覽(27)
  • HNU數(shù)據(jù)結(jié)構(gòu)與算法分析-作業(yè)2-線性結(jié)構(gòu)

    HNU數(shù)據(jù)結(jié)構(gòu)與算法分析-作業(yè)2-線性結(jié)構(gòu)

    ? 1.?(簡答題) 4.1 假設(shè)一個線性表包含下列元素: |2,23,15,5,9 使用Shaffer編寫的教材《數(shù)據(jù)結(jié)構(gòu)與算法分析》的List?ADT編寫一些C++語句,刪除值為15的元素。 (要求:采用C或C++語言描述算法) 4.6 使用Shaffer編寫的教材《數(shù)據(jù)結(jié)構(gòu)與算法分析》的LList類,給LList類的實現(xiàn)添加一個成

    2024年02月05日
    瀏覽(25)
  • 數(shù)據(jù)結(jié)構(gòu)大作業(yè) 校園導(dǎo)航系統(tǒng)

    數(shù)據(jù)結(jié)構(gòu)大作業(yè) 校園導(dǎo)航系統(tǒng)

    【問題描述】 以我校為例,設(shè)計一個校園導(dǎo)航系統(tǒng),主要為來訪的客人提供信息查詢。系統(tǒng)有兩類登陸賬號,一類是游客,使用該系統(tǒng)方便校內(nèi)路線查詢;一類是管理員,可以使用該系統(tǒng)查詢校內(nèi)路線,可對校園景點路線可編輯。 【需求分析】 設(shè)計學(xué)校的平面圖,至少包括

    2024年02月09日
    瀏覽(17)
  • 數(shù)據(jù)結(jié)構(gòu)與算法【02】—線性表

    數(shù)據(jù)結(jié)構(gòu)與算法【02】—線性表

    CSDN系列專欄:數(shù)據(jù)結(jié)構(gòu)與算法專欄 針對以前寫的數(shù)據(jù)結(jié)構(gòu)與算法系列重寫(針對文字描述、圖片、錯誤修復(fù)),改動會比較大,一直到更新完為止 通過前面數(shù)據(jù)結(jié)構(gòu)與算法基礎(chǔ)知識我們知道了數(shù)據(jù)結(jié)構(gòu)的一些概念和重要性,那么本章總結(jié)下線性表相關(guān)的內(nèi)容。當(dāng)然,我用自己

    2024年02月05日
    瀏覽(63)
  • 數(shù)據(jù)結(jié)構(gòu)之list類

    數(shù)據(jù)結(jié)構(gòu)之list類

    list是列表類。從list 類開始,我們就要接觸獨屬于 Python 的數(shù)據(jù)類型了。Python 簡單、易用,很大一部分原因就是它對基礎(chǔ)數(shù)據(jù)類型的設(shè)計各具特色又相輔相成。 話不多說,讓我們開始學(xué)習(xí)第一個 Python 數(shù)據(jù)類型一list。 1. list的賦值 輸出結(jié)果 2. Python中l(wèi)ist的知識點 list 類與str類

    2024年01月19日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包