二叉树基本知识点2:
二叉树的非递归后序遍历
前序遍历是:根、左、右,后序遍历是:左、右、根,观察发现:前序和后序刚好遍历顺序相反。由于非递归后序遍历需要保存根节点及第几次访问,比较麻烦。可以将整个过程变为先非递归前序遍历,将结果保存,再将结果翻转即可。
已知二叉树的前序、中序序列,求后序序列
void suffix_order(char* pre_order, char* in_order, int len){
if(NULL == pre_order || NULL == in_order){
return;
}
char root = pre_order[0];
if(len == 1){
suffix[level++] = root;
if(level == pre_order_len){
int i;
for(i=0; i<level; i++){
printf("%c ",suffix[i]);
}
return ;
}
return;
}
suffix[level++] = root;
int j=0;
char * in = in_order;
while(*in != '\0' && root != *in){
j++;
if(j >= len){
break;
}
in++;
}
int left_len = in - in_order;
int right_len = len - left_len - 1;
if(right_len > 0){
suffix_order(pre_order+1+left_len,in_order+1+left_len,right_len);
}
if(left_len > 0){
suffix_order(pre_order+1,in_order,left_len);
}
}