二叉树(一)利用数组初始化二叉树,并实现前序中序后序遍历

来源:互联网 发布:淘宝店铺2心要多少单 编辑:程序博客网 时间:2024/05/24 01:35
这是一个利用数组来初始化一个二叉树,初始化的树是一个完全二叉树,并利用三种遍历算法实现遍历
#include <iostream>using namespace std;#define N 20int Number[N];//根据数组建立一个二叉堆typedef struct BiTreeNode{int val;struct BiTreeNode *left;struct BiTreeNode *right;}Node;void creBiTreeNode(int *p,int num,Node *cur,int curIndex);Node* creBiTree(int *p,int num);void travBiTree0(Node *head);//前序void travBiTree1(Node *head);//中序void travBiTree2(Node *head);//后序int main(){for(int i=0;i<N;i++)Number[i]=i;Node* head=creBiTree(Number,N);travBiTree0(head);cout<<endl;travBiTree1(head);cout<<endl;travBiTree2(head);cout<<endl;getchar();};void creBiTreeNode(int *p,int num,Node *cur,int curIndex){if (p==NULL||num<=0||cur==NULL||curIndex>=num||curIndex<0){return ;}int last=num-1;if (2*curIndex+1<=last){cur->left=new Node;cur->left->val=p[2*curIndex+1];}else{cur->left=NULL;}if (2*curIndex+2<=last){cur->right=new Node;cur->right->val=p[2*curIndex+2];}else{cur->right=NULL;}creBiTreeNode(p, num,cur->left,2*curIndex+1);creBiTreeNode(p, num,cur->right,2*curIndex+2);}Node* creBiTree(int *p,int num){if (p==NULL||num<=0){return NULL;}Node *head=new Node;head->val=p[0];creBiTreeNode(p, num,head,0);return head;}void travBiTree0(Node *head)  //前序遍历 中左右{if (head==NULL){return;}cout<<head->val<<"\t";travBiTree0(head->left);travBiTree0(head->right);}void travBiTree1(Node *head)  //中序遍历 左中右{if (head==NULL){return;}travBiTree1(head->left);cout<<head->val<<"\t";travBiTree1(head->right);}void travBiTree2(Node *head)  //后序遍历 左右中{if (head==NULL){return;}travBiTree2(head->left);travBiTree2(head->right);cout<<head->val<<"\t";}

0 0
原创粉丝点击