遞歸法創建二叉樹


用遞歸法創建二叉樹

定義二叉樹的結構如下:

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

運行截圖:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM