需要从inOrder和preOrder返回postOrder树

我被赋予一项任务,要求我必须从其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);
       }
   }
}

lxbagglo 回答:需要从inOrder和preOrder返回postOrder树

这是如何移植C ++代码的方法。三个额外的参数用于表示作为前三个参数传递的字符串/字符数组中的索引。

public static void post(String pre,String in,char[] pos,int preIdx,int inIdx,int posIdx,int n) {
    if (n == 0) return;
    pos[posIdx+n-1] = pre.charAt(preIdx);
    int longIzqda = in.indexOf(pre.charAt(preIdx),inIdx) - inIdx;
    post(pre,in,pos,preIdx+1,inIdx,posIdx,longIzqda);
    post(pre,preIdx+1+longIzqda,inIdx+1+longIzqda,posIdx+longIzqda,n-1-longIzqda);
}

public static void main(String[] args) {
    // Example use
    String pre = "5213476";
    String in = "1234567";
    int n = pre.length();
    char[] post = new char[n];
    post(pre,post,n);
    System.out.println(new String(post));
}
本文链接:https://www.f2er.com/3150365.html

大家都在问