zoukankan      html  css  js  c++  java
  • 根据前序遍历和中序遍历重建二叉树

    实例:

    8
    1 2 4 7 3 5 6 8
    4 7 2 1 5 3 8 6

    import java.util.Scanner;
    
    /**
     * 重建二叉树
     * 8
    1 2 4 7 3 5 6 8
    4 7 2 1 5 3 8 6
     * @author DELL
     *
     */
    public class ReconstructionTree {
    
        private static class Node{
            private Node left=null;
            private Node right=null;
            private int value;
            
            public Node(int value) {
                // TODO Auto-generated constructor stub
                this.value=value;
            }
        }
        public static void main(String[] args) {
            ReconstructionTree resTree=new ReconstructionTree();
            Scanner scanner=new Scanner(System.in);
            System.out.println("请输入:");
            int[] preOrder;
            int[] inOrder;
            int length;
            while(scanner.hasNext()){
                length=scanner.nextInt();
                preOrder=new int[length];
                inOrder=new int[length];
                for (int i = 0; i < preOrder.length; i++) {
                    preOrder[i]=scanner.nextInt();
                }
                for(int i=0;i<inOrder.length;i++){
                    inOrder[i]=scanner.nextInt();
                }
                //重建二叉树,根据前序遍历和中序遍历
                Node head=resTree.reconstruction(preOrder, inOrder, 0, 0, length-1);
                System.out.println("先序遍历");
                printPreTree(head);
                System.out.println("
    中序遍历");
                printInOrderTree(head);
                System.out.println("
    后续遍历");
                printAfterTree(head);
            }
        }
        private static void printAfterTree(Node head){
            if(head!=null){
                printAfterTree(head.left);
                printAfterTree(head.right);
                System.out.print(head.value+" ");
            }
        }
        private static void printInOrderTree(Node head){
            if(head!=null){
                printInOrderTree(head.left);
                System.out.print(head.value+" ");
                printInOrderTree(head.right);
            }
        }
        private static void printPreTree(Node head) {
            // TODO Auto-generated method stub
            if(head!=null){
                System.out.print(head.value+" ");
                printPreTree(head.left);
                printPreTree(head.right);
            }else{
                return;
            }
        }
        private static int findIndex(int[] preOrder, int[] inOrder,int value, int beg,
                int end) {
            // TODO Auto-generated method stub
            for(int i=beg;i<=end;i++){
                if(inOrder[i]==value){
                    return i;
                }
            }
            System.out.println("not found!");
            return -1;
        }
        private Node reconstruction(int[] preOrder,int[] inOrder,int i,int beg,int end){
            System.out.println("beg="+beg+"; end="+end);
            if(beg>end){
                return null;
            }
            Node node=new Node(preOrder[i]);
            int index=findIndex(preOrder, inOrder, preOrder[i], beg, end);
            if(index==beg){
                node.left=null;
                node.right=reconstruction(preOrder,inOrder,i+1,index+1,end);
            }else if(index==end){
                node.left=reconstruction(preOrder, inOrder, i+1, beg, index-1);
                node.right=null;
            }else{
                node.left=reconstruction(preOrder, inOrder, i+1, beg, index-1);
                node.right=reconstruction(preOrder,inOrder,i+index-beg+1,index+1,end);
            }
            
            return node;
        }
    }
  • 相关阅读:
    Redis数据类型有哪些?
    python---判断元素是否可用 is_displayed/is_enabled/is_selected
    pythone---获取文本链接,text/get_attribute/current_url/title
    python---清空 clear
    python---获取元素 CSS
    JDK安装及配hi环境
    python---获取元素 Xpath
    python---获取元素 id/name/class_name/link_text/partial选择器及注意事项
    python---数据类型----set集合和字典
    web搭建自动化环境
  • 原文地址:https://www.cnblogs.com/csxf/p/3522076.html
Copyright © 2011-2022 走看看