java语言构造顺序树_PAT-1086(Tree Traversals Again)Java语言实现+根据中序和前序遍历构建树并且给出后序遍历序列...

import java.util.Scanner;

import java.util.Stack;

/**

* @Author WaleGarrett

* @Date 2020/9/5 12:02

*/

/**

* 根据前序遍历和中序遍历来构建一棵树

* 进栈的顺序对应前序遍历的顺序,出栈的顺序对应中序遍历的顺序

*/

public class PAT_1086 {

static int[] preorder;

static int[] inorder;

public static void main(String[] args) {

Scanner scanner=new Scanner(System.in);

Stacksta=new Stack<>();

int n=scanner.nextInt();

scanner.nextLine();//读取上一行的换行符

preorder=new int[n];

inorder=new int[n];

int precnt=0,incnt=0;

n*=2;

while(n!=0){

String s=scanner.nextLine();

// System.out.println(s);

if(s.length()>4){//push操作

String values=s.substring(5);

int value=Integer.parseInt(values);

sta.push(value);

preorder[precnt++]=value;

}else{//pop操作

int value=sta.peek();

sta.pop();

inorder[incnt++]=value;

}

n--;

}

TreeNode root=createTree(0,precnt-1,0,incnt-1);//根据前序遍历序列和中序遍历序列构建二叉树

System.out.println(postOrder(root," ").trim());

}

public static TreeNode createTree(int prel,int prer,int inl,int inr){

if(prel>prer)//叶子结点

return null;

TreeNode root=new TreeNode();

root.value=preorder[prel];

int position=0;

for(int i=inl;i<=inr;i++){

if(preorder[prel]==inorder[i]){

position=i;

break;

}

}

int inlcnt=position-inl;

root.left=createTree(prel+1,prel+inlcnt,inl,position-1);

root.right=createTree(prel+inlcnt+1,prer,position+1,inr);

return root;

}

public static String postOrder(TreeNode root,String result){

if(root.left!=null)

result=postOrder(root.left,result);

if(root.right!=null)

result=postOrder(root.right,result);

result=result+root.value+" ";

return result;

}

}

class TreeNode{

TreeNode left;

TreeNode right;

int value;

public TreeNode(){

left=right=null;

value=-1;

}

public TreeNode(int value){

this.value=value;

left=right=null;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值