1. 程式人生 > >資料結構6-關於“樹”的生成與操作的例項

資料結構6-關於“樹”的生成與操作的例項

程式實現用先序序列建立一棵二叉樹,並輸出字元D位於二叉樹的層數。程式碼如下所示:

#include"stdio.h"

typedef struct BiTNode{
	char data; /*結點的資料域*/
	struct BiTNode *lchild,*rchild; /*指向左孩子和右孩子*/
}BiTNode,*BiTree;

/*建立一棵二叉樹*/
CreatBiTree(BiTree *T){
	char c;
	scanf("%c",&c);
	if(c == ' ')
		*T = NULL;
	else{
		*T = (BiTNode *)malloc(sizeof(BiTNode)); /*建立根節點*/
		(*T)->data = c; /*向根結點中輸入資料*/
		CreatBiTree(&((*T)->lchild)); /*遞迴地建立左子樹*/
		CreatBiTree(&((*T)->rchild)); /*遞迴地建立右子樹*/
	}
}
/*訪問二叉樹結點,輸出包含D字元結點位於二叉樹中的層數*/
visit(char c,int level){
	if(c == 'D')
		printf("%c is at %d lever of BiTree\n",c,level);
}
/*遍歷二叉樹*/
PreOrderTraverse(BiTree T,int level){
	if(T){
		visit(T->data,level);
		PreOrderTraverse(T->lchild,level+1);
		PreOrderTraverse(T->rchild,level+1);
	}
}

main(){
	int level =1;
	BiTree T = NULL; /*最開始T指向空*/
	CreatBiTree(&T); /*建立二叉樹*/
	PreOrderTraverse(T,level); /*遍歷二叉樹,找到包含D字元結點位於二叉樹中的層數*/
	getche();
}

實現結果如下圖所示:

例項與分析:

1.在建立二叉樹的過程中有這麼一行程式碼:*T = (BiTNode *)malloc(sizeof(BiTNode)),其中(BiTNode *)是否可以換成BiTree呢?答案是可以的,因為他倆可以看成是等效的。但是後面的sizeof(BiTNode)不可以換成sizeof(BiTree),因為BiTree是指標型別,而指標的sizeof都是一樣大的。

相關推薦

資料結構的基本操作(java版本)

本部落格來自慕課網《資料結構探險之樹篇》,慕課網主講老師使用C++實現的,這裡我將其改為java實現,以下是對程式碼的幾點說明:二叉樹:所有節點的度都小於等於2二叉樹的遍歷:根據訪問根的順序:前序、中序、後序。二叉樹陣列實現:左孩子下標 = 父節點下標2 + 1;右孩子下標

資料結構6-關於“”的生成操作例項

程式實現用先序序列建立一棵二叉樹,並輸出字元D位於二叉樹的層數。程式碼如下所示: #include"stdio.h" typedef struct BiTNode{ char data; /*結點的資料域*/ struct BiTNode *lchild,*rchil

資料結構7-關於“圖”的生成操作例項

程式實現用鄰接表儲存的形式建立一棵無向圖,應用深度優先搜尋的方法遍歷圖中各點,並打印出資料,程式碼如下所示: #include"stdio.h" typedef struct ArcNode{ /*單鏈表中的結點的型別*/ int adjvex; /*該邊指向的頂點在

資料結構6 && 實驗六:操作

一、實驗目的及要求 ⒈理解二叉樹的抽象資料型別的定義,及在C語言環境中的表示方法。 ⒉理解二叉樹的基本操作的演算法,及在C語言環境中一些主要基本操作的實現。   ⒊在C語言環境下實現二叉樹的應用操作: ①採用順序儲存建立一棵二叉樹。 ②採用二叉連結串列儲存一棵二叉樹,並實現

資料結構2-動態生成順序表的例項分析

動態建立一個順序表,並完成插入和刪除的操作。程式碼如下: #include"stdio.h" #include"conio.h" #define MaxSize 10 typedef int ElemType;/*將int定義為ElemType*/ typedef str

資料結構------線段1:概述建樹

資料結構——線段樹   作為一枚蒟蒻,學習是重要的。最近,我接觸了一種新資料結構——線段樹。我一見,只是全身懵逼,[流汗],怎麼這麼藍? 於是,我開始努力學,努力學······(此處省略INF個努力學),決定寫一下部落格。   線段樹是一棵二叉樹,並與分治有著密切關係。 就說說

資料結構------線段2:區間詢問單點修改

上一次我們講到線段樹的概念和建樹,今天,我們來講線段樹的區間詢問與單點修改。 ~~~~~~~~~~~~ |       區間詢問       | ~~~~~~~~~~~~ 一般來說,區間詢問是以這樣的形式出現滴: 給定一個區間 [ l ,

《演算法設計應用》資料結構回顧-

概念回顧 昨晚看到資料結構中的樹部分,現在回顧一下。   樹是資料結構裡面比較複雜,也比較有趣的一種。 對應的名稱很多,比如二叉樹,紅黑樹,B樹,B+樹等等 對應排序也挺多,前序,中序等等。   排序回顧 最近看到《演算法設計與應用》書裡面提到書的排序方式印象較深。 分為

20172308 實驗二《程式設計資料結構 實驗報告

20172308 2018-2019-1 實驗2 《線性結構》報告 課程:《程式設計與資料結構》 班級: 1723 姓名: 周亞傑 學號:20172308 實驗教師:王志強 實驗日期:2018年11月5日 必修/選修: 必修 1.實驗內容 (1)樹之實現二叉樹:完成鏈樹LinkedBinaryTr

《大話資料結構6》—— “的定義和基本概念”

   定義 ●  樹(Tree)是n(n≥0)個結點的有限集T,並且當n>0時滿足下列條件:      (1)有且僅有一個特定的稱為根(Root)的結點;   &

6.1-資料結構&演算法-堆疊佇列

----------------- 第七課  堆疊與佇列 一、資料結構的基本概念 1.邏輯結構 1)集合結構(集):結構中的元素除了同屬一個集之外,沒有任何聯絡。 2)線性結構(表):結構中的元素具有一對一的前後關係。

資料結構——由中序後序遍歷確定的二叉

由中序與後序遍歷確定的二叉樹 #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 50 typedef struct Node{ //二叉樹

資料結構——由前序中序遍歷確定的二叉

由前序與中序遍歷確定的二叉樹 #include<stdio.h> #include<stdlib.h> #include<string.h> #define MAXSIZE 50 typedef struct Node{ //二叉樹

資料結構操作

話不多少 q:690217293  歡迎交流 //_____________________________demo.cpp #include <cstdio> #include "Tree.h" #include <iostream> using

資料結構實驗之棧佇列六:下一較大值(二)(因為資料量大所以用棧來操作)

資料結構實驗之棧與佇列六:下一較大值(二) Time Limit: 150 ms Memory Limit: 8000 KiB Problem Description 對於包含n(1<=n<=100000)個整數的序列,對於序列中的每一元素,在序列中查詢

資料結構實驗之棧佇列八:棧的基本操作

Problem Description 堆疊是一種基本的資料結構。堆疊具有兩種基本操作方式,push 和 pop。push一個值會將其壓入棧頂,而 pop 則會將棧頂的值彈出。現在我們就來驗證一下堆疊的

資料結構:二分查詢二叉

關於二分查詢,原理其實不難,而且java Arrays類裡面有一個sorts()方法,可以先對資料進行排序,然後呼叫binarySerarch()方法,這個方法就是進行二分查詢用的。 下面是JDK的原始碼: private static int binarySe

資料結構實驗之棧佇列八:棧的基本操作(new)

#include <stdio.h> #include <stdlib.h> typedef struct node { int *base; int *top; int stacksize; } sqstack;

資料結構二叉(下)

上面兩篇我們瞭解了樹的基本概念以及二叉樹的遍歷演算法,還對二叉查詢樹進行了模擬實現。數學表示式求值是程式設計語言編譯中的一個基本問題,表示式求值是棧應用的一個典型案例,表示式分為字首、中綴和字尾三種形式。這裡,我們通過一個四則運算的應用場景,藉助二叉樹來幫助求解表

資料結構之基本查詢表查詢(上)

只要你開啟電腦,就會涉及到查詢技術。如炒股軟體中查股票資訊、硬碟檔案中找照片、在光碟中搜DVD,甚至玩遊戲時在記憶體中查詢攻擊力、魅力值等資料修改用來作弊等,都要涉及到查詢。當然,在網際網路上查詢資訊就更加是家常便飯。查詢是計算機應用中最常用的操作之一,也是許多程