1. 程式人生 > >考研資料結構與演算法之樹的生成(1)

考研資料結構與演算法之樹的生成(1)

只寫了個開頭中的開頭,因為書上的內容開始有點複雜了,尤其是引用了堆疊,這樣不利於專一的對樹進行學習,因此我在思考一種最合理的方案來對他進行簡化,現在只是對結構體進行了定義,如下:

#include <stdio.h>
#include <stdlib.h>
#define Status int
typedef char TElemType;
typedef struct BiTNode
{
	TElemType	data;
	struct BiTNode *lchild, *rchild;
}BitNode, *	BiTree;
Status CreateBiTree(BiTree &T);
Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e));

int main(void)
{
	system("pause");
}

好短好短對吧,不過書上一個用法是我沒有見過的,就是這一句定義:
Status PreOrderTraverse(BiTree T, Status (*Visit)(TElemType e));

Visit並沒有進行定義,但是系統沒有報錯,說明是系統給出的。

查了下是一個自定義函式的指標,把e傳進來的,看的還不是很懂,等明天在學習一下應該會有所瞭解

照著教材寫了下樹的生成,怎麼都不對,難過!

Status CreateBiTree(BiTree &T)
{
	// 按先序輸入到二叉樹中的值,空格表示空樹
	// 構造鏈式二叉樹
	TElemType ch;
	scanf("%c",&ch);
	if(ch == '#')	T = NULL;
	else
	{
		T = (BitNode *)malloc(sizeof(BitNode));
		if(!T)	exit(OVERFLOW);
		else
		{
			T->data = ch;
			CreateBiTree(T->lchild);
			CreateBiTree(T->rchild);
		}
	}
	return OK;
}


相關推薦

考研資料結構演算法生成1

只寫了個開頭中的開頭,因為書上的內容開始有點複雜了,尤其是引用了堆疊,這樣不利於專一的對樹進行學習,因此我在思考一種最合理的方案來對他進行簡化,現在只是對結構體進行了定義,如下: #include <stdio.h> #include <stdlib.h

資料結構演算法有序陣列2——in dart

本文比第一篇,採用了類實現。增加了運算子過載等功能。本來有序陣列是不能修改某個位置的值的,因為這樣會打破陣列的有序性;但為了演示,保留了修改的方法,但為此增加了排序。   1 import 'dart:math' show Random; 2 3 final _rnd = R

java資料結構演算法基本概念及二叉BinaryTree的設計實現

關聯文章:   樹博文總算趕上這周釋出了,上篇我們聊完了遞迴,到現在相隔算挺久了,因為樹的內容確實不少,博主寫起來也比較費時費腦,一篇也無法涵蓋樹所有內容,所以後續還會用2篇左右的博文來分析其他內容大家就持續關注吧,而本篇主要了解的知識點如下(還是蠻多

考研資料結構演算法堆疊的建立使用

    到了堆疊這裡一下子就輕鬆了,算是一種暫時的解脫吧。經過了連結串列部分的學習和思考,我突然意識到嚴蔚敏教材的嚴謹性。下面是按照教材實現的堆疊操作程式碼,唯一有些疑問的是在Pop操作中要不要根據需要縮減堆疊的尺寸呢? #include <stdio.h>

考研資料結構演算法堆疊的使用連結串列實現的堆疊

還是參考了別人的程式碼,不過比我自己寫出來的確實是要簡潔的多,不過仍然有不規範的地方,但是仍然值得我學習一下,在敲打的時候也是受到了一定的啟發。 #include <stdio.h> #include <stdlib.h> #define FULL

考研資料結構演算法堆疊的使用利用堆疊匹配括號

    具體實現方法如下: int main(void) {     SqStack S;     InitStack(S);     char str[255];     scanf("%s",str);     int i = 0;     while( str[i]

考研資料結構演算法堆疊的使用利用堆疊實現進位制轉換

    將十進位制的數字轉換成各種不同的進位制,這裡以八進位制為例,其實就是不斷的除以八然後取餘數,雖然用陣列也不難實現,但是顯然棧的後進先出的特性使得更容易理解了,具體實現方法如下: int main(void) { SqStack S; InitStack(S);

考研資料結構演算法利用堆疊實現行編輯程式

今天我的部落格終於迎來了第一位關注著,但是同時我也發現了之前的程式在出棧時是有一些問題的,但是還沒找到確切的原因,然後這一段程式碼是今天晚上實現的行編輯的demo,但是現在是不完善的,明天或者後天我將會將它徹底修復。 #include <stdio.h> #i

資料結構演算法分析-Java描述2-插入排序

插入排序有兩種演算法:直接插入排序和希爾排序 直接插入排序  原理:插入即表示將一個新的資料插入到一個有序陣列中,並繼續保持有序。 該排序演算法的外部迴圈為遍歷全部元素,內部迴圈為遍歷當前外部迴圈記錄元素的前面所有數字。 public static void inse

資料結構演算法躬行記1——連結串列

  連結串列(Linked List)是不同於陣列的另一種資料結構,它的儲存單元(即結點或元素)除了包含任意型別的資料之外,還需要包含指向另一個結點的引用,後文會用術語連結表示對結點的引用。   下面會列出連結串列與陣列的具體不同:   (1)陣列需要一塊連續的記憶體空間來儲存;而連結串列則恰恰相反,通過指標

資料結構演算法美專欄學習筆記-二叉基礎(上

樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1   二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結

資料結構演算法美專欄學習筆記-二叉基礎(下

二叉查詢樹 Binary Search Tree  二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現

資料結構演算法二叉搜尋插入、查詢刪除

1 二叉搜尋樹(BSTree)的概念   二叉搜尋樹又被稱為二叉排序樹,那麼它本身也是一棵二叉樹,那麼滿足以下性質的二叉樹就是二叉搜尋樹,如圖: 若左子樹不為空,則左子樹上所有節點的值都小於根節點的值; 若它的右子樹不為空,則它的右子樹上所有節點的值都大於

資料結構演算法十 提高二叉搜尋的效率

/*寫一個程式以實現插入、刪除且遍歷線索二叉搜尋樹,這裡樹中的每個節點包含一個字典程式。*/ using System; using System.Text; namespace Threads { class Node { /*兩個線索域;lthread,rthread;1

java資料結構演算法平衡二叉(AVL)的設計實現

關聯文章:   上一篇博文中,我們詳細地分析了樹的基本概念以及二叉查詢樹的實現過程,基於二叉查詢樹的特性,即對於樹種的每個結點T(T可能是父結點),它的左子樹中所有項的值小T中的值,而它的右子樹中所有項的值都大於T中的值。這意味著該樹所有的元素可以用某

資料結構演算法結構

視訊課堂https://edu.csdn.net/course/play/7621 在本章中,你將學習: 在樹中儲存資料 實現二叉樹 實現二叉搜尋樹 假設你被要求呈現作業系統的目錄結構

JavaScript 資料結構演算法美 - 非線性表中的、堆是幹嘛用的 ?其資料結構是怎樣的 ?

1. 前言 想學好前端,先練好內功,內功不行,就算招式練的再花哨,終究成不了高手。 非線性表(樹、堆),可以說是前端程式設計師的內功,要知其然,知其所以然。 筆者寫的 JavaScript 資料結構與演算法之美 系列用的語言是 JavaScript ,旨在入門資料結構與演算法和方便以後複習。 非線性表

資料結構演算法美專欄學習筆記-排序(上

排序方法 氣泡排序、插入排序、選擇排序、快速排序、歸併排序、計數排序、基數排序、桶排序。   複雜度歸類 氣泡排序、插入排序、選擇排序 O(n^2) 快速排序、歸併排序 O(nlogn) 計數排序、基數排序、桶排序 O(n)     演算法的執行效率 1. 最

資料結構演算法美專欄學習筆記-排序(下

分治思想 分治思想 分治,顧明思意就是分而治之,將一個大問題分解成小的子問題來解決,小的子問題解決了,大問題也就解決了。 分治與遞迴的區別 分治演算法一般都用遞迴來實現的。分治是一種解決問題的處理思想,遞迴是一種程式設計技巧。   歸併排序 演算法原理 歸併的思想 先把陣列從中間分

資料結構演算法美專欄學習筆記-線性排序

線性排序 線性排序的概念 線性排序演算法包括桶排序、計數排序、基數排序。 線性排序演算法的時間複雜度為O(n)。 線性排序的特點 此3種排序演算法都不涉及元素之間的比較操作,是非基於比較的排序演算法。 對排序資料的要求很苛刻,重點掌握此3種排序演算法的適用場景。   桶排序 演算法