将排序数组转换为平衡二进制搜索树

时间: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