二叉樹需要不斷的自己畫圖並且一步一步的跟著程式走才能明白它的原理:
二叉樹結點結構定義
binode,*bitree;
//通過前序遍曆法建立一棵二叉樹,其形參使用結點的二級指標。當每個葉結點的左右孩子是『#』時表示二叉樹建立完成
void createtree(bitree*t)
}
//釋放二叉樹空間
void destroytree(bitree*t)
//遞迴前序遍曆法:思想先根結點,在左子樹最後右子樹;(每個非葉子結點都可以看作臨時根結點)根-左-右;
void
preordertarverse(bitree t)
//非遞迴前序遍曆法:思想:通過棧的先進後出屬性,邊進棧邊列印結點資料。先將根結點及左孩子都進棧,直到左孩子為空,進棧結束
//當棧不空時,出棧,並訪問出棧結點的右孩子。若右孩子不為空則繼續進棧操作。
void
preordertarverse1(bitree t)
if (!s.empty())//
出棧操作}}
//遞迴中序遍曆法:思想先左子樹,在根結點最後右子樹;(每個非葉子結點都可以看作臨時根結點)左-根-右;
void
inordertarverse(bitree t)
//非遞迴中序遍曆法:思想:通過棧的先進後出屬性,出棧時列印結點資料。先將根結點及左孩子都進棧,直到左孩子為空,進棧結束
//當棧不空時,出棧,並列印出棧結點資料,訪問出棧結點的右孩子。若右孩子不為空則繼續進棧操作。
void
inordertarverse2(bitree t)
if (!s.empty())}}
//遞迴後序遍曆法:思想先左子樹,在右子樹,最後根結點;(每個非葉子結點都可以看作臨時根結點)左-右-根;
void
postordertarverse(bitree t)
//非遞迴後序遍曆法:思想通過雙棧法實現,先根結點進棧,在右結點進棧,直到右節點為空。然後出棧並訪問出棧結點的左孩子。
//若左孩子不為空繼續執行進棧操作。最後將其中乙個棧的元素全部出棧列印。
void
postordertarverse3(bitree t)
if (!s1.empty())//
結點出棧操作
}while (!s2.empty())//
列印結點操作
}
//層序佇列遍曆法:通過佇列的先進先出屬性父類結點出隊其左右孩子進隊,先將根結點進隊,然後出隊,若出隊結點的左孩子存在則左孩子進隊,
//若右孩子存在則右孩子進隊。然後繼續出隊迴圈執行。
void
ordertr**erse(bitree t)
}
//葉子結點數
intleaftree(bitree t)
}
//結點個數
intnumtree(bitree t)
//二叉樹深度
二叉樹基本操作
tree.h ifndef tree h define tree h include typedef int element 定義二叉樹 typedef struct nodetreenode void preorder treenode root 遞迴前序遍歷 void inorder treen...
二叉樹基本操作
一.二叉樹的定義 二.二叉樹的建立 定義一棵無資料的二叉樹 6 int left size 7 int right size 為了操作簡便,我們定義一棵不需要儲存資料的二叉樹,只要能儲存節點之間的邏輯關係就行,所以用兩個陣列來表示。left i 第i個節點的左子節點的序號 right i 第i個節點...
二叉樹基本操作
include include define maxsize 100 typedef char elemtype typedef struct node btnode void createbtnode btnode b,char str 由str串建立二叉鏈 j ch str j btnode f...