1. 程式人生 > >資料結構與演算法一一二叉樹

資料結構與演算法一一二叉樹




二、滿二叉樹



三、完全二叉樹



四、二叉樹性質









#include <stdio.h>
#include <stdlib.h>

typedef char ElemType;

typedef struct BiTNode
{
	char data;
	struct BiTNode *lchild, *rchild;

} BiTNode, *BiTree;

// 建立一顆二叉樹: T為指向結構體指標的指標	*T為指向結構體指標	**T就表示結構體
void createBiTree(BiTree *T)
{
	char c;

	scanf("%c", &c);
	if (' ' == c)	// 如果輸入空格,就表示輸入結束
	{
		*T = NULL;

	} else {

		*T = (BiTNode *)malloc(sizeof(BiTNode));
		(*T)->data = c;
		createBiTree(&(*T)->lchild);
		createBiTree(&(*T)->rchild);
	}
}

// 訪問二叉樹結點的具體操作
void visit(char c, int level)
{
	printf("%c 位於第 %d 層\n", c, level);
}

// 前序遍歷
void preOrderTraverse(BiTree T, int level)
{
	if ( T )
	{
		visit(T->data, level);
		preOrderTraverse(T->lchild, level + 1);
		preOrderTraverse(T->rchild, level + 1);
	}
}

// 中序遍歷
void inOrderTraverse(BiTree T, int level)
{
	if ( T )
	{
		inOrderTraverse(T->lchild, level + 1);
		visit(T->data, level);
		inOrderTraverse(T->rchild, level + 1);
	}
}

// 後序遍歷
void postOrderTraverse(BiTree T, int level)
{
	if ( T )
	{
		postOrderTraverse(T->lchild, level + 1);
		postOrderTraverse(T->rchild, level + 1);
		visit(T->data, level);
	}
}

五、赫夫曼樹






六、二分查詢樹

相關推薦

資料結構演算法一二

二、滿二叉樹三、完全二叉樹四、二叉樹性質#include <stdio.h> #include <stdlib.h> typedef char ElemType; typed

資料結構演算法篇 二(Binary Tree)(

好多天沒有寫過資料結構和演算法了,好了今天抽出點時間二叉樹,前面講到的都是線性表,棧,佇列等等。 今天講到的是非線性表結構--樹,首先說一下什麼是樹的概念 樹的這種資料結果挺像我們現實中的樹,這裡的每一個元素我們叫做節點,用線把相鄰的節點連線起來,然後它們就成了父子關係。 A節點是

python 資料結構演算法 day05 二的深度優先遍歷(縱向)

1. 二叉樹深度優先遍歷三種方式   不同於樹的廣度優先遍歷(一層一層的走,同一層從左到右走完開始走下一層的橫向遍歷方式),深度優先遍歷是一條路走到黑,然後再走下一條;    先序遍歷:根節點--左子節點---右子節點(先從根節點開始,走左子樹,對這個左子樹依然按照根節點

14_資料結構演算法_二_Python實現

#Created By: Chen Da class BinaryTree(object): def __init__(self,rootObj): self.key = rootObj self.left_child = None sel

資料結構演算法學習--二及二搜尋

可以看下以前對數的總結https://blog.csdn.net/sjin_1314/article/details/8507490 下面是二叉樹的遍歷,建立及銷燬的函式實現,層次遍歷依賴佇列;佇列實現可以去github上檢視https://github.com/jin13417/al

資料結構演算法篇 二(Binary Tree)(二)

今天要講的是二叉查詢樹(Binary Search Tree),是一種最常用的二叉搜尋樹,支援快速查詢,刪除,插入資料。 它是如何實現的呢?,其實它依靠的它的資料結構,在樹中的任意一個節點,其左子樹的每個節點的值都小於這個節點的值,右子樹都大於這個節點的值。 接下來我們來看一下二叉樹是

修煉內功---資料結構演算法29---二的儲存

樹和二叉樹的定義和特性,樹這種結構不能簡單通過線性表的前後關係來儲存,線上性表中,一個節點只有至多一個前驅節點和至多一個後驅節點,樹則不然,一個節點可能有多個後驅節點,這個時候,我們需要通過更加複雜的結構才能儲存樹。二叉樹是一種特殊的樹,比多叉樹要簡單,因為特定節點至多隻有兩個節點,這就極大簡化了相

資料結構演算法:二

二叉樹是一種非常常見並且實用的資料結構,它結合了有序陣列與連結串列的優點。在二叉樹中查詢資料與在陣列中查詢資料一樣快,在二叉樹中新增、刪除資料的速度也和在連結串列中一樣高效,所以有關二叉樹的相關技術一直是程式設計師面試筆試中必考的知識點。 基礎知識 二叉樹(Bi

Javascript之資料結構演算法的二和二搜尋實現

Javascript之資料結構與演算法的二叉樹和二叉搜尋樹實現 簡介 程式碼實現 簡介 二叉樹中的節點最多隻能有兩個子節點:一個是左側子節點,另一個是右側子節點。 二叉搜尋樹( BST)是二叉樹的一種,但是它只允許你在

資料結構演算法】二遞迴非遞迴遍歷(附完整原始碼)

二叉樹是一種非常重要的資料結構,很多其他資料機構都是基於二叉樹的基礎演變過來的。二叉樹有前、中、後三種遍歷方式,因為樹的本身就是用遞迴定義的,因此採用遞迴的方法實現三種遍歷,不僅程式碼簡潔且容易理解,但其開銷也比較大,而若採用非遞迴方法實現三種遍歷,則要用棧來模擬實現(遞迴也

資料結構演算法---線索化二(Threaded BinaryTree)

先看一個問題 將數列 {1, 3, 6, 8, 10, 14  } 構建成一顆二叉樹 問題分析: 當我們對上面的二叉樹進行中序遍歷時,數列為 {8, 3, 10, 1, 6, 14 } 但是 6, 8, 10, 14 這幾個節點的 左右指標,並沒有完全的利用上. 如果我們希望充分的

資料結構演算法總結——二查詢及其相關操作

我實現瞭如下操作 插入,查詢,刪除,最大值 樹的高度,子樹大小 二叉樹的範圍和,範圍搜尋 樹的前序,中序,後序三種遍歷 rank 前驅值 在這一版本的程式碼中,我使用了類模板將介面與實現分

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

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

資料結構演算法14-二排序

二叉排序樹 又稱為二叉查詢樹。它或者是一棵空樹,或者是具有下列性質的二叉樹, 1.    若它的左子樹不空,則左子樹上的所有結點的值均小於它的根結構值 2.    若它的右子樹不空,則右子樹上的所有結點的值均

資料結構演算法:二排序

二叉排序樹 二叉排序樹(Binary Sort Tree),又稱二叉查詢樹(Binary Search Tree),亦稱二叉搜尋樹。是資料結構中的一類。在一般情況下,查詢效率比連結串列結構要高。 二叉排序樹的定義: 當左子樹不為空時,左子樹上的所有節點值都小於左子樹的根節點值 當右子樹不為空時,右子樹

17_資料結構演算法_二堆_Python實現

#Created By: Chen Da #先實現一個二叉堆,基於完整二叉樹 class Binary_heap(object): def __init__(self): self.heap_list = [0] #一個空的二叉堆以零作為第一個元素,方

16_資料結構演算法_遍歷(前序、中序、後序)_Python實現

#Created By: Chen Da #定義一個二叉樹的類 class Binary_Tree(object): def __init__(self,root): self.key = root self.left_child = None

資料結構演算法()——相關概念

引子 Algorithms + Data Structures = Programs (演算法+資料結構=程式) 程式設計包括演算法,資料結構和程式設計語言三部分.演算法是求解問題的過程描述,資料結構是對所要求解問題中的資料的儲存和演算法策略實現的支援,程式設計語言是使用

資料結構演算法(九):AVL詳細講解

資料結構與演算法(一):基礎簡介 資料結構與演算法(二):基於陣列的實現ArrayList原始碼徹底分析 資料結構與演算法(三):基於連結串列的實現LinkedList原始碼徹底分析 資料結構與演算法(四):基於雜湊表實現HashMap核心原始碼徹底分析 資料結構與演算法(五):LinkedHashM

資料結構演算法(七)-

前言:回顧一下前面學習的內容,大概說了下資料結構中的線性結構,從物理儲存方面來說又分為順序儲存和鏈式儲存結構,各自有自己的優缺點,順序儲存結構讀快寫慢,鏈式儲存結構寫快讀慢。但是這些資料元素之間的關係都為一對一的關係,而我們生活中關係不止是一對一,有可能是一對多,多對多,本篇先介紹一下一對多的儲存結構,那麼它