挑战程序设计竞赛(算法和数据结构)——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实现