首页 > 编程语言 > 详细

PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历

时间:2020-09-05 17:44:48      阅读:65      评论:0      收藏:0      [点我收藏+]

Build A Binary Search Tree

PAT-1099

  • 本题有意思的一个点就是:题目已经给出了一颗排序二叉树的结构,需要根据这个结构和中序遍历序列重构一棵二叉排序树。
  • 解法:可以根据中序遍历的思路,首先将给定的序列串进行排序即是中序遍历的结果。接着,根据给定的树结构进行中序遍历,这期间就可以确定每个结点的值。最后,只需要根据这棵树就能进行层次遍历了。
  • 题目具备一些难度,需要一些思维能力和扩展能力。
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

/**
 * @Author WaleGarrett
 * @Date 2020/9/5 16:20
 */
public class PAT_1099 {
    static BNode[] nodes;
    static int[] number;
    static int cnt=0;//中序遍历的个数
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int n=scanner.nextInt();
        nodes=new BNode[n];
        number=new int[n];
        for(int i=0;i<n;i++){
            nodes[i]=new BNode();
            int left=scanner.nextInt();
            int right=scanner.nextInt();
            nodes[i].left=left;
            nodes[i].right=right;
        }
        for(int i=0;i<n;i++)
            number[i]=scanner.nextInt();
        Arrays.sort(number);
        inOrder(0);
        String result=levelOrder(0);
        System.out.println(result.trim());
    }
    public static void inOrder(int n){
        if(nodes[n].left!=-1){
            inOrder(nodes[n].left);//进入左子树
        }
        nodes[n].value=number[cnt++];
        if(nodes[n].right!=-1){
            inOrder(nodes[n].right);//进入右子树
        }
    }
    public static String levelOrder(int n){
        String result="";
        List<Integer> list=new ArrayList<>();
        list.add(n);
        while(list.size()!=0){
            int now=list.remove(0);
            int left=nodes[now].left;
            int right=nodes[now].right;
            result=result+nodes[now].value+" ";
            if(left!=-1) list.add(left);
            if(right!=-1) list.add(right);
        }
        return result;
    }
}
class BNode{
    int left,right,value;
}

PAT-1099(Build A Binary Search Tree)Java实现+二叉排序树的中序遍历和层次遍历

原文:https://www.cnblogs.com/GarrettWale/p/13618740.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!