流利说编程题

题目:输出二叉搜索树的层序遍历
输入:
第一行: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(" ");
        }
    }
}
#笔试题目##流利说#
全部评论
Python版的 class BinaryTreeNode(object): def __init__(self, val): self.val = val self.left = None self.right = None def _find_parent(nodes, i): i_parent = -1 max_min_val = -float('inf') for j in range(i): if max_min_val < nodes[j].val < nodes[i].val: max_min_val = nodes[j].val i_parent = j return i_parent def gen_bst(arr, n): if not arr: return nodes = [] for num in arr: nodes.append(BinaryTreeNode(num)) for i in range(1, n): if nodes[i].val < nodes[i - 1].val: nodes[i - 1].left = nodes[i] else: i_parent = _find_parent(nodes, i) nodes[i_parent].right = nodes[i] return nodes[0] def level_order(root): ret = [] if not root: return ret queue = [root] while queue: cur = queue.pop(0) ret.append(cur.val) if cur.left: queue.append(cur.left) if cur.right: queue.append(cur.right) return ret if __name__ == '__main__': arr = [8, 3, 1, 6, 4, 7, 10, 14, 13] n = 9 root = gen_bst(arr, n) ret = level_order(root) print(' '.join([str(num) for num in ret]))
点赞 回复
分享
发布于 2019-07-30 21:35
不需要重建二叉树的版本
点赞 回复
分享
发布于 2019-07-30 21:35
滴滴
校招火热招聘中
官网直投
流利说的题并不是很难,只是时间太短了。
点赞 回复
分享
发布于 2019-07-30 21:32
同没完成 好想抽自己一巴掌
点赞 回复
分享
发布于 2019-07-30 21:31
你是什么岗位的题?
点赞 回复
分享
发布于 2019-07-30 21:38
可以先对数组排序然后在构建树吗?
点赞 回复
分享
发布于 2019-07-30 21:41

相关推荐

点赞 17 评论
分享
牛客网
牛客企业服务