算法思路:
1、后序最后元素为根,根将中序分为左右子树
2、层序遍历利用队列实现,java使用LinkedList
import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; class Node{ int key; Node left; Node right; public Node(int key){ this.key=key; } } public class Main { static int num; static int post[]; static int in[]; public static Node createBT(int postH, int postT, int inH, int inT){ if(postH>=postT)return null; int key=post[postT-1]; Node root=new Node(key); int i=inH; for(;i<inT;i++) if(key==in[i])break; root.left=createBT(postH,i-inH+postH,inH,i); root.right=createBT(i-inH+postH,postT-1,i+1,inT); return root; } public static void levelTr(Node root){ Queue<Node> que=new LinkedList<Node>(); if(null!=root)System.out.print(root.key); if(null!=root.left)que.offer(root.left); if(null!=root.right)que.offer(root.right); while(!que.isEmpty()){ Node node=que.poll(); System.out.print(" "+node.key); if(null!=node.left)que.offer(node.left); if(null!=node.right)que.offer(node.right); } } public static void main(String[] args){ Scanner sc=new Scanner(System.in); num=sc.nextInt(); post=new int[num]; in=new int[num]; for(int i=0;i<num;i++) post[i]=sc.nextInt(); for(int i=0;i<num;i++) in[i]=sc.nextInt(); Node root=createBT(0,num,0,num); levelTr(root); sc.close(); } }
时间: 2024-10-28 06:36:20