樹是乙個應用十分廣泛和重要的非線性資料結構。樹是一種以分支關係定義的層次結構。
這裡重要討論二叉樹。在樹的應用中,它起著特別重要的作用。處理樹的許多問題用二叉樹形式解決就變的很簡單了,而任何樹跟二叉樹之間可以通過簡單規則的操作互相轉換。
二叉樹可以採用順序分配的儲存方式,也可以採用鍊錶的儲存方式,但由於順序分配儲存方式可能會造成記憶體的極大浪費,因此較少使用。
當用鍊錶表示二叉樹時,每個節點常常設定三個域,即資料域、左子樹和右子樹,如下:
struct tree
char info;
struct tree *left;
struct tree *right;
遍歷二叉樹有三種方法:中序、前序和後序。
中序:先訪問左子樹,然後訪問樹根,最後訪問右子樹;
前序:先訪問樹根,然後訪問左子樹,最後訪問右子樹;
後序:先訪問左子樹,然後訪問右子樹,最後訪問樹根。
例子如下(中序遍歷):
#include
#include
struct tree
;struct tree *root;
struct tree *construct(struct tree *root, struct tree *r, char info);
void print(struct tree *r, int l);
int main(void)
while( *s);
print(root,0);
return 0;
}struct tree *construct(struct tree *root, struct tree *r, char info)
r->left = null;
r->right = null;
r->info = info;
if(!root)
if(info < root->info)
else
return root; //返回根節點.
}if(info < r->info)
else
return root;
}void print(struct tree *r, int l) //"l"用於計數.
print(r->left, l+1);
for(i = 0; i < l; ++i)
printf("%c/n",r->info);
print(r->right, l+1);
}前序遍歷方法:
void scan(struct tree root)
if(!root)
return;
if(root->info)
//操作
scan(root->left);
scan(root->right);
後序遍歷方法:
void scan(struct tree root)
if(!root)
return;
scan(root->left);
scan(root->right);
if(root->info)
//操作
二叉樹基本操作
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...