二叉樹的基本操作

2021-08-13 19:37:17 字數 1427 閱讀 7651

上週二叉樹的實驗報告拖到今天才勉強完成,說明對二叉樹的掌握還不是很透徹,在遞迴演算法上沒怎麼弄清楚,下面記錄寫出的幾個二叉樹的基本操作:

1.構建二叉樹

2.求二叉樹的葉子數

3.求二叉樹的深度

這裡採用的是二叉樹的鏈式儲存:

typedef struct bitnodebitnode ,*bitree;
二叉樹的構建主要思路採用遞迴思想(求葉子數和求深度都用到了遞迴的思想):如果輸入的不是標記符,則開始構建左子樹和右子樹,否則就將該結點data值記為標記符

int createbitree(bitree *t)

(*t)->data = ch;

}else

printf("\t\t\t\t\t(*t)->data = ch:");

(*t)->data = ch; //生成根節點

printf(" lchild:");

createbitree(&(*t)->lchild); //生成左子樹

printf("\t\t\t\t\t rchild:");

createbitree(&(*t)->rchild); //生成右子樹

}return ok;

}//建立二叉樹

構建二叉樹時需要注意的地方:

一開始寫成了

if(ch == 'z')

寫了乙個野指標,沒有為其分配空間,導致給二叉樹賦值的時候非正常退出,應為:

if(ch == 'z')

(*t)->data = ch;

}

計算葉子數思想:判斷該結點data值是否是標記符,如果是則返回0,如果不是則判斷左右子樹是否均為空,即判斷該結點是否為葉子結點,如果是則返回1,如果該節點左右子樹不為空,則分別計算左右子樹的葉子結點然後相加

int countbitreeleaf(bitree t)

else if((t->lchild->data == 'z') && (t->rchild->data == 'z'))

else

}//統計葉子結點的個數

計算樹的深度:

1、基準情形:空樹返回0;

2、遞迴形式:若不是空樹,比較它的左子樹深度和

右子樹深度,返回較大深度值加1,即:

return (rightdep>leftdep) ? rightdep+1 : leftdep+1;

int bitreedepth(bitree t)

else

}//求樹的深度

總結:二叉樹的操作很大程度上用到了遞迴的思想,對遞迴的用法和對指標的理解仍需要加強。

二叉樹基本操作

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