挑战程序设计竞赛(算法和数据结构)——8.5二叉树的重建的JAVA实现

Posted 小乖乖的臭坏坏

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了挑战程序设计竞赛(算法和数据结构)——8.5二叉树的重建的JAVA实现相关的知识,希望对你有一定的参考价值。

题目:

思路:
这个讲解部分的伪代码有一些问题,最后我是在不断的Debug的时候找到的,建议用手推一遍,不然中间递归的细节实在是想不清楚。


手推一遍:

代码:

import java.io.BufferedInputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;

public class ReconstructionTree 
    public static void main(String[] args) 
        Scanner cin = new Scanner(new BufferedInputStream(System.in));
        System.out.println("请输入树的节点个数:");
        int n = cin.nextInt();
        System.out.println("请输入前序遍历的结果:");
        ArrayList<Integer> pre_order = new ArrayList<Integer>();
        ArrayList<Integer> in_order = new ArrayList<Integer>();
        for (int i=0;i<n;i++)
            pre_order.add(cin.nextInt());
        
        System.out.println("请输入中序遍历的结果:");
        for (int i=0;i<n;i++)
            in_order.add(cin.nextInt());
        

        reconstruction(pre_order, in_order,0,  n, 0, n);

    

    public static void reconstruction(ArrayList<Integer> pre, ArrayList<Integer> in, int pos, int n, int l, int r)
        if(l>=r)
            return;
        
        int c = pre.get(pos);
        pos++;
        int m = in.indexOf(c);
        if(m<l || m>r)reconstruction(pre, in, pos, n, l, r);return;//循环调用就完了
        reconstruction(pre, in, pos, n, l, m);
        reconstruction(pre, in, pos, n, m+1, r);
        System.out.print(c + " ");
        pos++;
    



输入:

请输入树的节点个数:
5
请输入前序遍历的结果:
1 2 3 4 5
请输入中序遍历的结果:
3 2 4 1 5

输出:

3 4 2 5 1 

以上是关于挑战程序设计竞赛(算法和数据结构)——8.5二叉树的重建的JAVA实现的主要内容,如果未能解决你的问题,请参考以下文章

挑战程序设计竞赛(算法和数据结构)——8.3二叉树的表达的JAVA实现

挑战程序设计竞赛(算法和数据结构)——8.4二叉树的遍历的JAVA实现

挑战程序设计竞赛(算法和数据结构)——9.2二叉搜索树插入的JAVA实现

挑战程序设计竞赛(算法和数据结构)——9.3二叉搜索树搜索的JAVA实现

挑战程序设计竞赛(算法和数据结构)——9.4二叉搜索树删除的JAVA实现

平衡二叉树的算法