根据先序遍历和中序遍历,打印层序遍历

来源:互联网 发布:胡琳 知乎 编辑:程序博客网 时间:2024/06/05 02:31

import java.util.*;class Node{public int data;    public Node left;    public Node right;    public Node(){}    public Node(int data){    this.data = data;        this.left = null;        this.right = null;    }}public class Main{public static void main(String[] args){    Scanner in = new Scanner(System.in);        int n = in.nextInt();        int[] preOrder = new int[n];        int[] inOrder = new int[n];        for(int i=0;i<n;i++){        preOrder[i] = in.nextInt();        }        for(int i=0;i<n;i++){        inOrder[i] = in.nextInt();        }                Node root = initTree(preOrder,0,preOrder.length-1,inOrder,0,inOrder.length-1);        layerTraverse(root);    }        public static Node initTree(int[] preOrder,int start1,int end1,int[] inOrder,int start2,int end2){if(start1 > end1 || start2 > end2) return null;                int rootData = preOrder[start1];        Node root = new Node(rootData);                int rootIndex = findIndexInArray(inOrder,rootData,start2,end2);        int offset = rootIndex - start2 -1;        Node left = initTree(preOrder,start1+1,start1+1+offset,inOrder,start2,start2+offset);        Node right = initTree(preOrder,start1+offset+2,end1,inOrder,rootIndex+1,end2);        root.left = left;        root.right = right;        return root;}        public static int findIndexInArray(int[] a,int x,int begin,int end){for(int i=begin;i<=end;i++){        if(a[i] == x) return i;        }          return -1;}        public static void layerTraverse(Node root){    if(root == null) return;        Queue<Node> nodeQue = new LinkedList<Node>();        nodeQue.add(root);        while(!nodeQue.isEmpty()){        Node p = nodeQue.poll();            System.out.print(p.data + " ");            if(p.left != null) nodeQue.add(p.left);            if(p.right != null) nodeQue.add(p.right);        }    }}



0 0
原创粉丝点击