我被赋予一项任务,要求我必须从其preOder和inOrder返回二叉树的postOrder。用papper和pencil完成此操作很容易,但是任务是开发一个自动执行此操作的java函数。必须在Java中完成。
我找到了一种解决方案,但是它是用c ++编写的,这使我无法翻译,我尝试了在线翻译,但返回的Java代码不可用
void post(char *pre,char *in,char *pos,int n)
{
int longIzqda;
if(n!=0){
pos[n-1]=pre[0];
longIzqda=strchr(in,pre[0])-in;
post (pre+1,in,pos,longIzqda);
post (pre+1+longIzqda,in+1+longIzqda,pos+longIzqda,n-1-longIzqda);
}
}
package include;
import com.mtsystems.coot.NativeHelper;
import com.mtsystems.coot.String8;
public class String {
static {
// The online demo uses the example library "libc.so.6".
// Have a look at the translated programs for real values.
NativeHelper h = NativeHelper.get("libc.so.6");
h.bindDirect(String.class);
}
public static native String8 strchr(String8 s,int c);
}
// ----- ----- Class 2: DemoTranslation ----- -----
package demo;
import static com.mtsystems.coot.NativeInformation.dataDistance;
import static com.mtsystems.coot.String8.nnc;
import static include.String.strchr;
import com.mtsystems.coot.String8;
public class DemoTranslation {
public static void post(String8 pre,String8 in,String8 pos,int n) {
int longIzqda;
if(n != 0) {
pos.set(n - 1,pre.get(0));
longIzqda = (int)dataDistance(in,strchr(in,pre.get(0)));
post(nnc(pre).shift(1),longIzqda);
post(nnc(pre).shift(1 + longIzqda),nnc(in).shift(1 + longIzqda),nnc(pos).shift(longIzqda),n - 1 - longIzqda);
}
}
}