bobo大大大大佬好,这是我自己想的根据数组随机生成一棵二叉树的,思路是先随机打乱数组,然后生成二叉树,但是现在***遇到的问题是二叉树的结构不是随机的***,总是偏向一边,我虽然知道是***if语句出了问题,但是想了好久也不知道怎么改***
public class Solution2 {
Random random = new Random(System.currentTimeMillis());
//根据数组随机生成一棵二叉树
public TreeNode generateTree(int[] array){
randomArray(array);
return dfs(array,0);
}
private TreeNode dfs(int[] array,int index){
TreeNode node = new TreeNode(array[index]);
if(index == array.length -1){
return node;
}
int flag = random.nextInt(2);
//这里有问题 但是感觉无从下手
if(flag % 2 == 0){
node.left = dfs(array,index + 1);
}else {
node.right = dfs(array,index +1);
}
return node;
}
private void randomArray(int[] array){
//bobo老师的公众号的随机算法
for(int i = array.length -1; i >= 0; i --){
swap(array,i,random.nextInt( i +1));
}
}
private void swap(int[] array,int aIndex, int bIndex){
int c = array[aIndex];
array[aIndex] = array[bIndex];
array[bIndex] = c;
}
}