二叉樹的基本操作

2021-04-20 05:22:03 字數 1562 閱讀 3463

樹是乙個應用十分廣泛和重要的非線性資料結構。樹是一種以分支關係定義的層次結構。

這裡重要討論二叉樹。在樹的應用中,它起著特別重要的作用。處理樹的許多問題用二叉樹形式解決就變的很簡單了,而任何樹跟二叉樹之間可以通過簡單規則的操作互相轉換。

二叉樹可以採用順序分配的儲存方式,也可以採用鍊錶的儲存方式,但由於順序分配儲存方式可能會造成記憶體的極大浪費,因此較少使用。

當用鍊錶表示二叉樹時,每個節點常常設定三個域,即資料域、左子樹和右子樹,如下:

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...