美文网首页Lintcode阶梯训练~算法
将二叉树按照层级转化为链表

将二叉树按照层级转化为链表

作者: lyoungzzz | 来源:发表于2017-06-28 11:15 被阅读46次

描述

给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有D层,那么你需要创建 D 条链表。

样例

对于二叉树:

    1
   / \
  2   3
 /
4
返回 3 条链表:
[
  1->null,
  2->3->null,
  4->null
]

代码实现

/**
 * Definition of TreeNode:
 * public class TreeNode {
 *     public int val;
 *     public TreeNode left, right;
 *     public TreeNode(int val) {
 *         this.val = val;
 *         this.left = this.right = null;
 *     }
 * }
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    /**
     * @param root the root of binary tree
     * @return a lists of linked list
     */
    public List<ListNode> binaryTreeToLists(TreeNode root) {
        List<ListNode> result = new ArrayList<>();
        if (root == null) {
            return result;
        }
        Queue<TreeNode> queue = new LinkedList<>();
        queue.offer(root);
        ListNode dummy = new ListNode(0);
        ListNode lastNode = null;
        //result输出[1-2-3-null,  1-2-3-null,1-2-3-null]
        //dummy.next = null;
        //lastNode = dummy;
        while(!queue.isEmpty()) {
           //遍历完一层后重新将dummy和lastNode 初始化
            dummy.next = null;
            lastNode = dummy;
            //TreeNode node = queue.poll();
            int size = queue.size();
            for (int i = 0; i < size; i++) {
                TreeNode node = queue.poll();
                lastNode.next = new ListNode(node.val);
                lastNode = lastNode.next; 
                if (node.left != null) {
                    queue.offer(node.left);
                }
                if (node.right != null) {
                    queue.offer(node.right);
                }
            }
            result.add(dummy.next);
        }
        return result;
    }
}

相关文章

  • 将二叉树按照层级转化为链表

    描述 给一棵二叉树,设计一个算法为每一层的节点建立一个链表。也就是说,如果一棵二叉树有D层,那么你需要创建 D 条...

  • 将二叉树拆成链表

    描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 ...

  • LintCode 453. 将二叉树拆成链表

    题目描述 将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的right指针,来表示链表中的n...

  • InnoDB 索引

    链表 -> 二叉查找树 -> 平衡二叉树 -> B树 -> B+树 链表:层级等于链表长度二叉查找树:链表优化,...

  • 114. Flatten Binary Tree to Link

    题目 给定一个二叉树的根 root,将这棵二叉树展开为链表。这个链表有两个特性 链表节点由二叉树类表示,节点左节点...

  • 每日一题[18]-倒数找链表节点

    输入一个链表,输出该链表中倒数第k个结点。解:利用JavaScript的特性,我选择将链表转化为array,(^-...

  • 二叉树基础

    二叉树的分类 完全二叉树与满二叉树 二叉搜索树BST 平衡二叉搜索树BBST因为二叉搜索树有可能退化为链表,降低查...

  • 109. Convert Sorted List to Bina

    将链表转化为平衡二叉查找树,和数组转化为平衡二叉查找树类似,思路比较清晰。 关键点在于如何寻找链表的中点,运用了快...

  • 114. 二叉树展开为链表

    二叉树展开为链表给定一个二叉树,原地将它展开为链表。 例如,给定二叉树

  • 【2019-08-21】leetcode(141-150)

    141、环形链表 142、环形链表II 143、重排链表 144、二叉树的前序遍历 145、二叉树后序遍历 146...

网友评论

    本文标题:将二叉树按照层级转化为链表

    本文链接:https://www.haomeiwen.com/subject/oofucxtx.html