您的位置:首页 > 其它

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

2013-11-30 14:01 387 查看

前言

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

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

Arrays.sort(num);

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

cin.close();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: