最近看了一下二叉排序树的建立,自己写了一段代码,用来建立二叉排序树,给定一个数组,对这个数组中的数字进行建立二叉排序树。分两种情况:
1 数组中的数字是随机的,也就是说没有顺序 eg : int a [ ] = {3,1,2,5,0,7,9,8} ,用这个数组中的数字建立二叉排序树,注意这里的二叉排序树是随便的,没有特殊的要求(比如建立高度最小的二叉排序树),可知二叉排序树是不唯一的。常规方法采用递归,首先先以3这个数字为根节点,仅接着采用递归,大于根节点的在右子树中,小于等于根节点的在左子树中。二叉排序树结构图:
以上构建的二叉排序树的算法代码如下:
1.1使用递归构造排序二叉树的方法:
public Tree SortBinaryTree(Tree node,int i){
if(node == null){
node = new Tree(i);
return node;
}
else{
if(i <= node.value){
node.left = SortBinaryTree(node.left, i);
}
else{
node.right = SortBinaryTree(node.right,i);
}
return node;
}
}
1.2 使用上方方法,进行构建:
int shuzu []= {3,1,2,5,0,7,9,8};
Tree tree = realtree.new Tree(shuzu[0]); //以3这个数为根节点
for( int i = 1 ; i < shuzu.length ; i ++){
realtree.SortBinaryTree(tree, shuzu[i]);
}
代码很简单,逻辑清晰,如果觉得不保险,可用中序遍历遍历一遍,二叉排序树的中序遍历是递增的。
2 第2种情况,如果给定一个随机的数组,我们需要建立一个高度最小的二叉排序树,我们应该怎么做:
首先,把给定的随机数组排个序,以升序的方式进行排序,ok,这个排序算法的代码就不写了。
然后 , 构造高度最小的二叉排序树,高度最小意味着左子树和右子树的高度基本相等,所以我们会想,首先我们以排序好的数组的中间数为根节点,然后中间数的左边是左子树,右边是右子树,然后在对中间数的左边的数再取中间数以它为上一个根节点的左子树,依次类推,来构建。
还是以上面的数组进行 a[] = {3,1,2,5,0,7,9,8}进行升序排序后为 a[ ] = {0,1,2,3,5,7,8,9},二叉排序树结构图:中间数为3以它为根节点:结构图如下:
2.1 最小高度的二叉排序树结构图所对应的算法代码如下:
public Tree createminheighttree(int a [] , int start , int end ){
if(end < start){
return null;
}
int min = (start + end) / 2;
Tree tree = new Tree(a[min]);
tree.left = createminheighttree(a, start, min -1);
tree.right = createminheighttree(a, min+ 1, end);
return tree;
}
2.2 使用上述方法进行构建:
Tree tree = realtree.createminheighttree(shuzu, 0, shuzu.length -1);
以上就是两种构建排序二叉树的方法,如果哪里有错,请告知,或者方法笨拙,还有更好的方法,可以互相讨论。