其实三种遍历唯一的区别就是输出的相对递归代码段位置不同罢了,而且恰恰好是上中下三个位置;
那么接下来就是三种遍历的实现了【短得可怜】
给你一颗存储在一维数组中的树tr[N],从根节点开始遍历
前序遍历
void front(int x){//刚刚进入递归时x=1
if(tr[x]=='\0') return;
cout<<tr[x]<<' ';
front(x*2)//左树
fornt(x*2+1)//右树
}
中序遍历
void middle(int x){//刚刚进入递归时x=1
if(tr[x]=='\0') return;
middle(x*2)//左树
cout<<tr[x]<<' ';
middle(x*2+1)//右树
}
后续遍历
void behind(int x){//刚刚进入递归时x=1
if(tr[x]=='\0') return;
behind(x*2)//左树
cout<<tr[x]<<' ';
behind(x*2+1)//右树
}
就是这么简单:)