将排序数组转换为平衡二进制搜索树
时间:2020-02-23 14:34:46 来源:igfitidea点击:
在本教程中,我们将看到如何将排序数组转换为平衡二进制搜索树。
算法:
我们可能知道,InOrder遍历二进制搜索树导致排序阵列。
我们将使用此属性将排序阵列转换为平衡二进制搜索树,因此数组或者子数组的中间元素将始终是该数组或者子阵列的root。
- 初始化两个变量启动并以0和ARR.Length -1结尾。
- 使用开始和结束查找数组的中间元素。
- 制作树的中间元素根元素。
- 递归遍历左子树,找到中间并使其成为左子树的根节点
- 递归遍历右子树,找到中间并使其成为右子树的根节点。
Java代码将排序数组转换为平衡二进制搜索树:
package org.arpit.theitroad.binarysearchtree; public class BinarySearchTreeSortedArrayMain { public static class TreeNode { int data; TreeNode left; TreeNode right; TreeNode(int data) { this.data = data; } } public static void preOrder(TreeNode root) { if (root == null) return; System.out.print(root.data + " "); preOrder(root.left); preOrder(root.right); } public static void main(String[] args) { //Creating a binary search tree int arr[]={10,20,30,40,50,60,70,80,90}; TreeNode rootNode = createBinarySearchTreeFromSortedArray(arr,0,arr.length-1); System.out.println("Preorder traversal of created binary search tree :"); preOrder(rootNode); } public static TreeNode createBinarySearchTreeFromSortedArray(int[] arr,int start,int end) { if (start > end) { return null; } /* Get the middle element and make it root */ int mid = (start + end)/2; TreeNode node = new TreeNode(arr[mid]); /* Recursively construct the left subtree and make it left child of root */ node.left = createBinarySearchTreeFromSortedArray(arr, start, mid - 1); /* Recursively construct right subtree and make right child of the root */ node.right = createBinarySearchTreeFromSortedArray(arr, mid + 1, end); return node; } }
运行上面的程序时,我们将得到以下输出:
Preorder traversal of created binary search tree : 50 20 10 30 40 70 60 80 90