二叉樹的建立及相關操作
阿新 • • 發佈:2019-01-12
二叉樹是一種非常重要的資料儲存結構,是一種特殊的、常用的樹型資料結構,則其基本操作也就非常重要。因為二叉樹本身就是一個遞迴型資料儲存結構,所以其操作基本上都可以用遞迴的形式實現。
【二叉樹的建立】
要嚴格地進行輸入,要把所有結點的左右孩子都進行輸入,空結點用#代替(比如:ABC##DE#G##F###)。
typedef struct BiTNode { char date; struct BiTNode *lchild, *rchild; }BiTNode, *BiTree; void create(BiTree &T) { char temp; cin >> temp; if (temp == '#')T = NULL; else { if (!(T = (BiTNode*)malloc(sizeof(BiTNode)))) { cout << "記憶體已炸" << endl; return; } T->date = temp; create(T->lchild); create(T->rchild); } }
【二叉樹的先序輸出遍歷】
void pretravl(BiTree T)//先序
{
if (T != NULL)
{
cout << T->date;
pretravl(T->lchild);
pretravl(T->rchild);
}
}
【二叉樹的中序輸出遍歷】
void medtravl(BiTree T)//中序 { if (T != NULL) { medtravl(T->lchild); cout << T->date; medtravl(T->rchild); } }
【二叉樹的後序輸出遍歷】
void behtravl(BiTree T)//後序
{
if (T != NULL)
{
behtravl(T->lchild);
behtravl(T->rchild);
cout << T->date;
}
}
【二叉樹求深度】
int GetHeight(BiTree BT) { int len1, len2; if (BT == NULL) return 0; len1 = GetHeight(BT->lchild); len2 = GetHeight(BT->rchild); if (len1 > len2) return len1 + 1; else return len2 + 1; }
【二叉樹求葉子數】
int TreeLeafSize(BiTNode* root)
{
if (root == NULL)
return 0;
if (root->lchild == NULL && root->rchild == NULL)
return 1;
return TreeLeafSize(root->lchild) + TreeLeafSize(root->rchild);
}
可見以上函式的實現都是依靠遞迴實現的,遞迴方法較為簡潔,加上二叉樹本身的特性,實現起來較為簡單。不過還是有缺點的,執行較慢,消耗記憶體較大。有不對的地方還請多多指教。