二叉樹基本操作
阿新 • • 發佈:2020-12-15
二叉樹基礎操作
求二叉樹的建立、遍歷、葉子結點個數、樹的深度
// 先序序列ABC##DE#G##F###
#include <iostream>
#include <cstdlib>
using namespace std;
typedef char ElemType;
typedef struct BitNode{
ElemType data;
struct BitNode *lchild, *rchild;
}BitNode,*BitTree;
void CreateBitTree(BitTree *T) ;
bool PreTravellers(BitTree T);
bool InTravellers(BitTree T);
bool PostTravellers(BitTree T);
int CountLeaf(BitTree T);
int CountLevel(BitTree T);
int main()
{
BitTree T = NULL;
// 約定按先序遍歷輸入二叉樹
CreateBitTree(&T);
cout << "The PreOrder: ";
// 先序遍歷二叉樹
PreTravellers (T);
cout << endl << "The InOreder: ";
// 中序遍歷二叉樹
InTravellers(T);
cout << endl << "The PostOrder; ";
// 後序遍歷二叉樹
PostTravellers(T);
cout << endl;
// 求二叉樹中的葉子結點個數
cout << "The leaf num: " << CountLeaf (T) << endl;
// 求當前二叉樹的深度
cout << "The BitTree degree is : " << CountLevel(T) << endl;
return 0;
}
// 前序遍歷輸入二叉樹
void CreateBitTree(BitTree *T)
{
ElemType ch;
cin >> ch;
if(ch == '#')
{
(*T) = NULL;
}
else
{
(*T) = new BitNode;
(*T)->data = ch;
CreateBitTree(&(*T)->lchild);
CreateBitTree(&(*T)->rchild);
}
}
// 先序遍歷二叉樹
bool PreTravellers(BitTree T)
{
if(T != NULL)
{
cout << T->data << ' ';
PreTravellers(T->lchild);
PreTravellers(T->rchild);
}
return true;
}
// 中序遍歷二叉樹
bool InTravellers(BitTree T)
{
if(T != NULL)
{
InTravellers(T->lchild);
cout << T->data << ' ';
InTravellers(T->rchild);
}
return true;
}
// 後序遍歷二叉樹
bool PostTravellers(BitTree T)
{
if(T != NULL)
{
PostTravellers(T->lchild);
PostTravellers(T->rchild);
cout << T->data << ' ';
}
return true;
}
// 求二叉樹葉子節點個數
int CountLeaf(BitTree T)
{
int count;
if(T == NULL)
count = 0;
else if(T->lchild == NULL && T->rchild == NULL)
count = 1;
else
count = CountLeaf(T->lchild) + CountLeaf(T->rchild);
return count;
}
// 求當前二叉樹的深度
int CountLevel(BitTree T)
{
if(T == NULL)
return 0;
int ldp = CountLevel(T->lchild);
int rdp = CountLevel(T->rchild);
return (ldp>rdp?ldp+1:rdp+1);
}