用遞歸法創建二叉樹
定義二叉樹的結構如下:
typedef struct TreeNode{
char a;
struct TreeNode *left;
struct TreeNode *right;
}Tree;
定義的結構體Tree里有三個成員,a,左子樹left,右子樹right
二叉樹創建遍歷規則:
1.前序:根-左-右
2.中序:左-根-右
3.后序:左-右-根
定義的函數:
void CreateTree(TreeNode * &T)//先序法創建二叉樹
{
char data;
cin>>data;
if(data=='#')
T=NULL;
else
{
T=new TreeNode;
T->a=data;
CreateTree(T->left);
CreateTree(T->right);
}
}
void PreorderTree(TreeNode *T)//前序遍歷二叉樹
{
if(T==NULL)
return;
cout<<T->a<<" ";
PreorderTree(T->left);
PreorderTree(T->right);
}
void InorderTree(TreeNode *T)//中序遍歷二叉樹
{
if(T==NULL)
return;
InorderTree(T->left);
cout<<T->a<<" ";
InorderTree(T->right);
}
void PostorderTree(TreeNode *T)//后序遍歷二叉樹
{
if(T==NULL)
return;
PostorderTree(T->left);
PostorderTree(T->right);
cout<<T->a<<" ";
}
主要原理:
先輸入要創建的二叉樹序列(#表示該子樹為空),通過遞歸和先序法創建一棵二叉樹,從根節點依次遞歸左子樹直至左子樹為空,再從該子樹依次遞歸右子樹依次返回直至根節點,之后再從根節點遞歸右子樹。
之后分別用前序遍歷二叉樹,中序遍歷二叉樹,后序遍歷二叉樹的方法遍歷二叉樹后輸出。
主函數如下:
int main()
{
cout<<"請輸入先序創建二叉樹的序列:"<<endl;
Tree *T;
CreateTree(T);
cout<<"前序遍歷的結果為:";
PreorderTree(T);
cout<<endl;
cout <<"中序遍歷的結果為:";
InorderTree(T);
cout<<endl;
cout <<"后序遍歷的結果為:";
PostorderTree(T);
return 0;
}
具體代碼如下:
二叉樹示例:
輸入: A B D F # # # E # # C G # # #
創建的二叉樹如下:
前序遍歷的結果為:A B D F E C G
中序遍歷的結果為:F D B E A G C
后序遍歷的結果為:F D B E A G C