import java.util.LinkedList;
public class CreateBSTfromSortedArray {
/**
* 题目:给定一个排序数组,如何构造一个二叉排序树
* 递归
*/
public static void main(String[] args) {
int[] data = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
CreateBSTfromSortedArray bst = new CreateBSTfromSortedArray();
Node root = bst.createBST(data);
bst.inOrder(root);
System.out.println();
bst.levelOrder(root);
}
public Node createBST(int[] data) {
if (data == null || data.length == 0) {
return null;
}
Node[] nodes = createNode(data);
return createBSTHelp(nodes, 0, data.length - 1);
}
//Recursion.Node[start...end],find its root.Then find left child and right child for the root.
public Node createBSTHelp(Node[] nodes, int start, int end) {
if (start > end) {
return null;
}
int mid = start + (end - start) / 2;
if (start == end) {
return nodes[mid];
}
Node root = nodes[mid];
root.left = createBSTHelp(nodes, start, mid - 1);
root.right = createBSTHelp(nodes, mid + 1, end);
return root;
}
public Node[] createNode(int[] data) {
int len = data.length;
Node[] nodes = new Node[len];
for (int i = 0; i < len; i++) {
nodes[i] = new Node(data[i]);
}
return nodes;
}
private static class Node {
int data;
Node left;
Node right;
Node(int data) {
this.data = data;
}
}
public void levelOrder(Node node) {
if (node == null)
return;
LinkedList<Node> queue = new LinkedList<Node>();
queue.addLast(node);
while (!queue.isEmpty()) {
Node curNode = queue.removeFirst();
System.out.print(curNode.data + " ");
if (curNode.left != null) {
queue.addLast(curNode.left);
}
if (curNode.right != null) {
queue.addLast(curNode.right);
}
}
}
public void inOrder(Node node) {
if (node == null) {
return;
}
inOrder(node.left);
System.out.print(node.data + " ");
inOrder(node.right);
}
}
分享到:
相关推荐
数组 - 需要参加面试的人
面试题53 - I. 在排序数组中查找数字 I题目链接面试题53 - I. 在排序数组中查找数字 I题目描述统计一个数字在排序数组中出现的次数。题解public
标题中的“java-leetcode面试题解哈希表第350题两个数组的交集II-题解.zip”指的是一个关于Java编程语言的LeetCode面试题解析,具体是第350题,题目要求解决“两个数组的交集II”的问题,而解题方法主要涉及哈希表的...
标题中的“java-leetcode面试题解哈希表第349题两个数组的交集-题解.zip”表明这是一个关于Java编程语言的LeetCode面试题解答,具体是针对第349题,该题目涉及使用哈希表解决两个数组的交集问题。LeetCode是一个知名...
标题中的“java面试-leetcode面试题解之第34题在排序数组中查找元素的第一个和最后一个位置-java题解”指的是一个关于Java编程的面试准备资料,特别针对LeetCode的第34题。LeetCode是一个在线平台,提供各种编程挑战...
第81题“搜索旋转排序数组II”(Search in Rotated Sorted Array II)是其中一个经典问题,它涉及到数组处理、二分查找以及边界条件的判断。本题解将深入探讨这个题目及其解决方案。 首先,我们要理解问题背景:...
Java综合面试题涵盖了Java语言的核心概念,面向对象特性,内存管理,编程技巧等多个方面。以下是对部分面试题的详细解答: 1. `super()`与`this()`的区别? - `super()`用于调用父类的构造函数,确保父类的初始化...
第33题“搜索旋转排序数组”是一个经典的问题,它涉及到数组处理、二分查找以及对特殊情况的处理,这些都是Java开发者必备的技能。现在我们来深入探讨这个题目及其解法。 **题目描述:** 给定一个旋转排序的数组,...
树 * 字典树 ...* 二叉查找树-从有序数组中构造二叉查找树 * 二叉查找树-从有序链表构造平衡的二叉查找树 * 二叉树-的最大深度 数组&字符串 查找排序 排列组合 动态规划 树 链表 数学 位运算 编程之美
在Java编程领域,LeetCode是一个非常受欢迎的在线平台,它提供了大量的编程题目,帮助开发者提升算法和数据结构技能,同时也是面试准备的重要资源。本题解将深入探讨LeetCode中的第49题——字母异位词分组,这是一道...
第34题,"在排序数组中查找元素的第一个和最后一个位置",是这样一类问题:它不仅测试了基本的数组操作,还涉及到二分查找的高级应用。下面我们将详细探讨这个问题以及相关的知识点。 ### 问题描述 给定一个已排序...
在本压缩包中,我们关注的是一个Java编程相关的学习资源,特别是一道源自LeetCode的面试题,题目编号为217,主题是检查数组中是否存在重复元素。这道题目通常出现在求职面试中,用于测试候选人在算法和数据结构方面...
本压缩包文件聚焦于一个特定的LeetCode面试题目——第88题“合并两个有序数组”。这个题目是关于数据结构和算法的,特别是涉及到了双指针技术,这是在优化遍历和合并操作时常用的一种策略。现在,我们将深入探讨这个...
针对"双指针按奇偶排序数组"的问题,我们需要一个包含整数的数组,并按照以下规则重新排列:所有偶数应该排在前面,所有奇数应该排在后面,但保持原有顺序不变(即相对位置)。例如,如果原数组为[1, 2, 3, 4, 5],...
这在C语言中是一个典型的指针和数组操作的面试题,考察应聘者对内存布局和指针运算的理解。 2. 关于sizeof操作符的面试题: 在Windows NT下的32位C++程序中,sizeof操作符的使用被测试。在Func(char str[100])函数...
2018年最全的Java高级工程师面试题集锦,包含了十几个文档,可以预见这些文档将涵盖JVM原理、并发编程、设计模式、数据结构与算法、Spring框架、数据库设计与优化、网络协议等多个领域。 1. **JVM(Java虚拟机)** ...
java基础面试题数字在排序数组中出现的次数本资源系百度网盘分享地址
在本压缩包中,我们关注的是一个Python编程与算法相关的主题,特别针对LeetCode平台上的第33题——"搜索旋转排序数组"。这是一道常见的面试题,旨在考察候选人在处理数组问题时的逻辑思维和算法应用能力,特别是在...
本题目的核心是第108题,即“将有序数组转换为二叉搜索树”,这是一个常见的数据结构与算法问题,对于理解和掌握二叉搜索树以及其构建方法至关重要。 二叉搜索树(Binary Search Tree, BST)是一种特殊的二叉树,它...
给定一个整数数组`nums`和一个整数`k`,我们需要找出并返回数组中所有乘积小于`k`的连续子数组的个数。子数组是由数组中连续元素组成的序列,而乘积则是子数组中所有元素的乘积。 双指针在这里的应用主要是为了减少...