上面二叉樹的前序遍歷序列爲(以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