流利说编程题
题目:输出二叉搜索树的层序遍历
输入:
第一行:N(二叉搜索书的节点数)
第二行:N个节点的值,空格隔开,换行结束
输出:
二叉搜索树的层序遍历结果
例子:
输入:
9
8 3 1 6 4 7 10 14 13
输出:
8 3 10 1 6 14 4 7 13
直接贴代码(虽然没在考试时间完成😥,但还是写了一份完整代码,仅供参考)
import java.util.*;
public class TopDownLeftRight {
public static class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
if (root == null) {
return null;
}
ArrayList<Integer> result = new ArrayList<>();
Queue<TreeNode> queue = new ArrayDeque<>();
queue.add(root);
while (!queue.isEmpty()) {
TreeNode node = queue.peek();
result.add(node.val);
if (node.left != null) {
queue.add(node.left);
}
if (node.right != null) {
queue.add(node.right);
}
queue.poll();
}
return result;
}
public TreeNode GenerateTree(int[] arr, int start, int end) {
if (start == end) {
return new TreeNode(arr[start]);
}
if (start > end) {
return null;
}
TreeNode root = new TreeNode(arr[start]);
int i = start + 1;
for (; i < end; i++) {
if (arr[i] > arr[start]) {
break;
}
}
if (i == arr.length - 1) {
root.left = GenerateTree(arr, start + 1, i);
} else {
root.left = GenerateTree(arr, start + 1, i - 1);
}
if (i <= end && arr[i] > arr[start]) {
root.right = GenerateTree(arr, i, end);
}
return root;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int NodeNum = sc.nextInt();
int[] NodeArr = new int[NodeNum];
for (int i = 0; i < NodeNum; i++) {
NodeArr[i] = sc.nextInt();
}
TopDownLeftRight topDownLeftRight = new TopDownLeftRight();
TreeNode root = topDownLeftRight.GenerateTree(NodeArr, 0, NodeNum - 1);
ArrayList<Integer> re = topDownLeftRight.PrintFromTopToBottom(root);
for (int i = 0; i < re.size(); i++) {
System.out.print(re.get(i));
System.out.print(" ");
}
}
}
