Loading

[二叉搜索树]前序和中序序列构造二叉搜索树

public class Main {


    public static class TreeNode{
        int val;
        TreeNode left;
        TreeNode right;

        TreeNode(int x,TreeNode l,TreeNode r){
            val = x;
            left = l;
            right = r;
        }
    }


    public static void main(String[] args) {

        ArrayList<Integer> preOrder = new ArrayList<>(Arrays.asList(3,9,20,15,7));
        ArrayList<Integer> inOrder = new ArrayList<>(Arrays.asList(9,3,15,20,7));

        TreeNode root = buildTree(preOrder,inOrder);
        dfs(root);

    }

    public static TreeNode buildTree(List<Integer> preOrder, List<Integer> inOrder) {

        System.out.println("preOrder:"+preOrder);
        System.out.println("inOrder:"+inOrder);

        if(preOrder.isEmpty()){
            return null;
        }

        int val = preOrder.get(0);
        int index = inOrder.indexOf(val);
        TreeNode node = new TreeNode(val,null,null);
        node.left = buildTree(preOrder.subList(1,index+1),inOrder.subList(0,index));
        node.right = buildTree(preOrder.subList(index+1,preOrder.size()),inOrder.subList(index+1,inOrder.size()));

        return node;
    }

    public static void dfs(TreeNode node){
        if(node != null){
            dfs(node.left);
            System.out.println(node.val);
            dfs(node.right);
        }
    }

}
posted @ 2025-03-24 13:42  Duancf  阅读(17)  评论(0)    收藏  举报