已知先序中序求后序 C实现(分治法)

xiaoxiao2021-02-28  60

知识盲点:

对数组掌握不牢固 

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<stdio.h> #include<stdlib.h> 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;       }  

转载请注明原文地址: https://www.6miu.com/read-53292.html

最新回复(0)