[LeetCode]Convert Sorted Array to Binary Search Tree, 解题报告

前言

最近一直在学习java SE,也将ACM的平台从九度OJ迁移到了LeetCode OJ,今天是11月的最后一天,在LeetCode OJ上ac了21道题,今天也发一个解题报告


思路

首先,需要明确平衡二叉树的定义,参考: 平衡二叉树

平衡二叉树(Balanced Binary Tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。构造与调整方法:平衡二叉树的常用算法有红黑树、AVL、Treap、伸展树等。 最小二叉平衡树的节点的公式如下 F(n)=F(n-1)+F(n-2)+1 这个类似于一个递归的数列,1是根节点、F(n-1)是左子树的节点数量、F(n-2)是右子数的节点数量

其次,就是利用二分的思想递归的构造平衡二叉树

(1)找到中点作为根节点 (2)再递归的构建左右子树


AC代码

import java.util.*;

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

        public TreeNode(int x) {
            this.val = x;
        }
    }

    public static TreeNode createBST(int[] num, int bt, int ed) {
        TreeNode root = null;

        if (bt <= ed) {
            int mid = bt + (ed - bt) / 2;
            root = new TreeNode(num[mid]);
            root.left = createBST(num, bt, mid - 1);
            root.right = createBST(num, mid + 1, ed);
        }

        return root;
    }

    public static TreeNode sortedArrayToBST(int[] num) {
        if (num.length == 0) return null;

        TreeNode root = createBST(num, 0, num.length - 1);

        return root;
    }

    public static void preOrderTraverse(TreeNode root) {
        if (root != null) {
            System.out.printf("%d ", root.val);
            preOrderTraverse(root.left);
            preOrderTraverse(root.right);
        }
    }

    public static void main(String[] args) {
        int i, n, num[];
        Scanner cin = new Scanner(System.in);

        while (cin.hasNext()) {
            n = cin.nextInt();
            num = new int[n];

            for (i = 0; i < n; i++) {
                num[i] = cin.nextInt();
            }

            Arrays.sort(num);

            TreeNode root = sortedArrayToBST(num);
            preOrderTraverse(root);
            System.out.println();
        }

        cin.close();
    }
}


你可能感兴趣的:([LeetCode]Convert Sorted Array to Binary Search Tree, 解题报告)