4.2 Minmal Tree
Given a sorted(increasing order ) array with unique integer elements write an algorithm to create a binary search tree with an algorithm to create a vinary search tree with minimal height.
给定一个増序排序数组(int型),写一个算法,创建最小高度的2叉树;
为了创建最小高度的树,我们需要尽量匹配左子树的节点个数和右子树的结点个数;所以,我们需要root在数组的中间;所以,半个数组会在左子树;半个在右子树;
每个子集的中间部分变成root元素,左边部分变成左子树,右边部分变成右子树;
算法步骤:
1 把数组中间元素插入tree;
2 插入左子树元素;
3 插入右子树元素
4 recurse
C# 代码:
public class TreeNode
{
public int val;
public TreeNode left;
public TreeNode right;
public TreeNode(int x)
{ val = x; }
}
<span style="white-space:pre"> </span>TreeNode CreateMinimalBST(int[] arr)
{
return CreateMinimalBST(arr,0, arr.Length-1);
}
TreeNode CreateMinimalBST(int[] arr, int start, int end)
{
if (start < end)
return null;
int mid = (start+end)/2;
TreeNode n = new TreeNode(mid);
n.left = CreateMinimalBST(arr,start,mid-1);
n.right = CreateMinimalBST(arr,mid+1,end);
return n;
}