高级农民
- 积分
- 2725
- 大米
- 颗
- 鳄梨
- 个
- 水井
- 尺
- 蓝莓
- 颗
- 萝卜
- 根
- 小米
- 粒
- 学分
- 个
- 注册时间
- 2017-6-18
- 最后登录
- 1970-1-1
|
楼主看看这个写法是不是比较容易理解一点.. 虽然代码量稍微多了一点,但 "TreeLevel" 和 "forEachNodeInNextLevel" 这两个用于解耦关键逻辑的模块写出来的话在面试时应该会有相当的加分效果
- // 用于构造树的一层
- class TreeLevel {
- private Node head = null;
- private Node tail = null;
- public void add(Node node) {
- if (head == null) {
- tail = head = node;
- } else {
- tail = tail.next = node;
- }
- }
- public Node getHead() {
- return head;
- }
- }
- class Solution {
- public Node connect(Node root) {
- for (Node levelStart = root; levelStart != null;) {
- TreeLevel nextLevel = new TreeLevel();
- // 遍历下一层所有节点并加入到'nextLevel'里面
- forEachNodeInNextLevel(levelStart, (node) - > nextLevel.add(node));
- // 进入下一层
- levelStart = nextLevel.getHead();
- }
- return root;
- }
- // 给定当前层的起始节点,遍历下一层的所有节点,并使用回调函数'callback'来处理。
- private void forEachNodeInNextLevel(Node levelStart, Consumer < Node > callback) {
- for (Node node = levelStart; node != null; node = node.next) {
- if (node.left != null) callback.accept(node.left);
- if (node.right != null) callback.accept(node.right);
- };
- // 一层的最后一个节点后面是null
- callback.accept(null);
- }
复制代码 |
|