问题:给定一个预排序数组,将其变成二叉搜索树
7
5 9
3 6 8 10
解决方案:
步骤 1:将数组转换为 Stack
从堆栈中弹出的第一个元素是根。
将其与下一个元素进行比较,如果小于根值,则将其设为左子树,否则将其设为右子树
这是代码
public class reconstruct{
public static void main(String[] args){
Stack s = new Stack();
Integer[] arr = {7,5,3,6,9,8,10};
List<Integer> l = Arrays.asList(arr);
for (int i=arr.length-1; i>=0;i--){
s.push(arr[i]);
}
System.out.println(s);
Node newone = CreateFromPreOrder(s);
printInorder(newone);
public static Node CreateFromPreOrder(Stack preOrder) {
if (!preOrder.isEmpty()) {
//System.out.println("hel");
int value = (int) preOrder.pop();
Node root = new Node(value);
if (!preOrder.isEmpty()){
if((int)preOrder.peek()<value){
root.left=CreateFromPreOrder(preOrder);
}
else
root.right = CreateFromPreOrder(preOrder);
}
return root;
}
else return null;
}
public static void printInorder(Node root) {
if (root!=null){
printInorder(root.left);
System.out.print(" " + root.data);
printInorder(root.right);
}
}
}
Output:
[10, 8, 9, 6, 3, 5, 7]
3 6 8 10 9 5 7
输出不是预期的有序数组。我无法弄清楚上面的逻辑有什么问题。