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

来源:互联网 发布:库存记录软件 编辑:程序博客网 时间:2024/05/17 00:18

前言

最近一直在学习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();    }}


原创粉丝点击