二叉樹創建(前序序列創建)、前序遍歷、中序遍歷、後序遍歷

上面二叉樹的前序遍歷序列爲(以0代替NULL):[1,2,4,8,0,0,9,0,0,5,10,0,0,11,0,0,3,6,12,0,0,0,7,0,0]

根據上面的前序遍歷,創建二叉樹,並對二叉樹進行前序遍歷、中序遍歷、後續遍歷

#include <iostream>
#include <vector>
using namespace std;

int index_num=0;
vector<int> num={1,2,4,8,0,0,9,0,0,5,10,0,0,11,0,0,3,6,12,0,0,0,7,0,0};

struct BiTree
{
    int val;
    BiTree *LeftChildNode;
    BiTree *RightChildNode;
    BiTree() : LeftChildNode(NULL), RightChildNode(NULL) {}
};

BiTree *CreateBitree_pre(int);
void traversing_pre(BiTree *t);
void traversing_mid(BiTree *t);
void traversing_las(BiTree *t);

int main()
{
    BiTree *tree;
    tree=CreateBitree_pre(0);//前序創建
    traversing_pre(tree);//前序遍歷
    cout<<endl;
    traversing_mid(tree);//中序遍歷
    cout<<endl;
    traversing_las(tree);//後序遍歷
    return 0;
}

//前序遍歷創建二叉樹
BiTree *CreateBitree_pre(int loc)
{
    
    if (num[loc] != 0 && loc < (int)num.size())
    {
        BiTree *node = new BiTree();
        node->val=num[loc];
        node->LeftChildNode = CreateBitree_pre(++index_num);
        node->RightChildNode = CreateBitree_pre(++index_num);
        return node;
    }
    return NULL;
}

//前序遍歷
void traversing_pre(BiTree *t)
{
    if(t!=NULL)
    {
        cout<<t->val<<" ";
        traversing_pre(t->LeftChildNode);
        traversing_pre(t->RightChildNode);
    }
}
//中序遍歷
void traversing_mid(BiTree *t)
{
    if(t!=NULL)
    {
        traversing_mid(t->LeftChildNode);
        cout<<t->val<<" ";
        traversing_mid(t->RightChildNode);
    }
}
//後序遍歷
void traversing_las(BiTree *t)
{
    if(t!=NULL)
    {
        traversing_las(t->LeftChildNode);
        traversing_las(t->RightChildNode);
        cout<<t->val<<" ";
    }
}

輸出結果:

1 2 4 8 9 5 10 11 3 6 12 7 
8 4 9 2 10 5 11 1 12 6 3 7
8 9 4 10 11 5 2 12 6 7 3 1

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章