本文共 883 字,大约阅读时间需要 2 分钟。
知识盲点:
对数组掌握不牢固
int a[5] = {1,2,3,4,5};
int *b;
b = &a[1];
b[2] = 4;
此实现传递的是数组指针,上一篇中实现是传递 数组下标。
传递下标 : in[in_pos+i] == pre[pre_pos];
传递指针 : in[i] == *pre;
为什么能实现两者的 等价(对于右边递归而言 左边同样道理)
in[I] = in[(in+i+1)+i] // in+i+1是上一次地址
关键 就在于递归调用传递 指针, 对in赋值时候,使 i 和 in_pos+i 具有同样的 效果(即指向同样的位置);
实现:
#include#include void to_post_tree(char* pre, char* in, int length){ char ch; if (length == 0) return; ch = *pre; int i; for (i = 0; i < length; i++) { if (in[i] == *pre) { break; } } to_post_tree(pre+1, in, i); to_post_tree(pre + i + 1, in + i + 1, length - i - 1); printf("%c", ch);}int main(){ char pre[8] = {'G','D','A','F','E','M','H','Z'}; char in[8] = {'A','D','E','F','G','H','M','Z'}; to_post_tree(pre, in, 8); return 0;}
另一种实现的 核心地方(注意对比):
for (i = 0; i < n; i++) { if (in[in_pos + i] == root) //root等价于上面的 *pre; break; }
转载地址:http://fximi.baihongyu.com/