首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >需要从inOrder和preOrder返回postOrder树

需要从inOrder和preOrder返回postOrder树
EN

Stack Overflow用户
提问于 2019-11-07 00:49:47
回答 1查看 79关注 0票数 0

我接到了一个任务,要求我必须从二叉树的preOder和inOrder返回它的postOrder。用papper和that做这件事很容易,但任务是开发一个自动做这件事的java函数。它必须在java中完成。

我已经找到了摘录的一种解决方案,但它是用c++编写的,这使得我无法翻译,我尝试了一个在线翻译程序,但它返回了无法使用的java代码

代码语言:javascript
复制
 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);
  }
}
代码语言:javascript
复制
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), in, pos, longIzqda);
           post(nnc(pre).shift(1 + longIzqda), nnc(in).shift(1 + longIzqda), nnc(pos).shift(longIzqda), n - 1 - longIzqda);
       }
   }
}
EN

回答 1

Stack Overflow用户

发布于 2019-11-07 05:08:42

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

代码语言:javascript
复制
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, in, pos, 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, in, post, 0, 0, 0, n);
    System.out.println(new String(post));
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58734959

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档