二叉樹是一種特殊的樹型結(jié)構(gòu),一般都以二叉樹作為樹型結(jié)構(gòu)學(xué)習(xí)的案例講解。
二叉樹的主要操作有遍歷,例如有先序遍歷、中序遍歷、后序遍歷。在遍歷之前,就是創(chuàng)建一棵二叉樹,當然,還需要有刪除二叉樹的算法。
以二叉樹的創(chuàng)建、刪除、先序遍歷為例,實現(xiàn)代碼如下
#include
#include
typedef char ElemType;
typedef struct node
{ ElemType data;
struct node *lchild, *rchild;
} BTNode;
BTNode * createTree(BTNode *tree){
ElemType e;
fflush(stdin);
scanf("%c", &e);
if(e != '#'){
tree = (BTNode *)malloc(sizeof(BTNode));
tree->data = e; tree->lchild = NULL; tree->rchild = NULL;
tree->lchild = createTree(tree->lchild);
tree->rchild = createTree(tree->rchild);
}
return tree;
}
void DestroyBTree(BTNode *b)
{ if (b==NULL) return ;
else
{ DestroyBTree(b->lchild);
DestroyBTree(b->rchild);
free(b);
}
}
void PreOrder(BTNode *b)
{ if (b!=NULL)
{ printf("%c ",b->data);
PreOrder(b->lchild);
PreOrder(b->rchild);
}
}
int main(){
BTNode *tree = createTree(tree);
PreOrder(tree);
DestroyBTree(tree);
return 0;
}
測試用例如下
A
B
D
#
G
#
#
#
C
E
#
#
F
#
#
A B D G C E F
以上測試用的測試案例,就是上述二叉樹圖形的結(jié)構(gòu),二叉樹構(gòu)成過程中,以先序的方式創(chuàng)建,子樹為空的時候,輸入為#
上述算法中,還可以做更多的優(yōu)化,每一個優(yōu)化都是一次進步。
審核編輯:劉清
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。
舉報投訴
-
二叉樹
+關(guān)注
關(guān)注
0文章
74瀏覽量
12324
發(fā)布評論請先 登錄
相關(guān)推薦
計算機二級二叉樹的問題
各位大神,本人馬上要考計算機二級了,那個二叉樹老是弄不明白,比如一個題目,一棵二叉樹共有25個節(jié)點,其中五個葉子節(jié)點,則度為1的節(jié)點數(shù)為?
發(fā)表于 09-04 09:45
基于二叉樹的時序電路測試序列設(shè)計
為了實現(xiàn)時序電路狀態(tài)驗證和故障檢測,需要事先設(shè)計一個輸入測試序列。基于二叉樹節(jié)點和樹枝的特性,建立時序電路狀態(tài)二叉樹,按照電路二叉樹節(jié)點(狀態(tài))與樹枝(輸入)的層次邏輯
發(fā)表于 07-12 13:57
?0次下載
二叉樹層次遍歷算法的驗證
實現(xiàn)二叉樹的層次遍歷算法,并對用”A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))”創(chuàng)建的二叉樹進行測試。
發(fā)表于 11-28 01:05
?2096次閱讀
二叉樹,一種基礎(chǔ)的數(shù)據(jù)結(jié)構(gòu)類型
然后我們再定義一棵深度也為 3 的二叉樹,該二叉樹的 n 個結(jié)點(n≤7),當從 1 到 n 的每個結(jié)點都與上圖中的編號結(jié)點一一對應(yīng)時,這二叉樹就稱為完全二叉樹。
紅黑樹(Red Black Tree)是一種自平衡的二叉搜索樹
平衡(Balance):就是當結(jié)點數(shù)量固定時,左右子樹的高度越接近,這棵二叉樹越平衡(高度越低)。而最理想的平衡就是完全二叉樹/滿二叉樹,高度最小的二叉樹。
二叉樹操作的相關(guān)知識和代碼詳解
樹是數(shù)據(jù)結(jié)構(gòu)中的重中之重,尤其以各類二叉樹為學(xué)習(xí)的難點。在面試環(huán)節(jié)中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關(guān)知識,梳理面試??嫉膬?nèi)容。請大家跟隨小編一起來復(fù)習(xí)吧。 本篇針對面
二叉樹的前序遍歷非遞歸實現(xiàn)
我們之前說了二叉樹基礎(chǔ)及二叉的幾種遍歷方式及練習(xí)題,今天我們來看一下二叉樹的前序遍歷非遞歸實現(xiàn)。 前序遍歷的順序是, 對于樹中的某節(jié)點,先遍
C語言數(shù)據(jù)結(jié)構(gòu):什么是二叉樹?
完全二叉樹:完全二叉樹是效率很高的數(shù)據(jù)結(jié)構(gòu)。對于深度為K,有n個節(jié)點的二叉樹,當且僅當每一個節(jié)點都與深度為K的滿二叉樹中編號從1至n的節(jié)點一一對應(yīng)時,稱為完全
怎么就能構(gòu)造成二叉樹呢?
一直跟著公眾號學(xué)算法的錄友 應(yīng)該知道,我在二叉樹:構(gòu)造二叉樹登場!,已經(jīng)講過,只有 中序與后序 和 中序和前序 可以確定一顆唯一的二叉樹。前序和后序是不能確定唯一的二叉樹的。
二叉樹的最大深度
精簡之后的代碼根本看不出是哪種遍歷方式,也看不出遞歸三部曲的步驟,所以如果對二叉樹的操作還不熟練,盡量不要直接照著精簡代碼來學(xué)。
評論