//二叉树重建的核心思想是利用递归和数组指针完成目的 #include #include #include void build( int n ,int *s1, int *s2, int *s ) { if( n <= 0 ) return; int p = strchr( s2, s1[0] ) - s2;//第一步:定位根节点,对比先序和中序。先序第一个元素即为根节点 build( p ,s1+1, s2, s );//第二步:递归求左树 build( n-p-1, s1+p+1, s2+p+1, s+p );//s1需要加p的原因是需要跳过左树 ,第三步:递归求右树 s[n-1] = s1[0];//第四步:记录根节点 } int main () { int s[50], s1[50], s2[50]; int n; scanf( "%d%d", s1, s2 ); n = strlen( s1 );// 求出树的节点量,方便计算 return 0; }
主要是递归思想,总结归纳出递归函数。
注意灵活应用数组指针,
浙公网安备 33010602011771号