牛客网 | 输出单层结点

来源:互联网 发布:bellman-ford算法实例 编辑:程序博客网 时间:2024/05/01 13:34

题目描述

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。

给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。

利用队列存储数据,根据深度判断,获取某一层存储到ArrayList中

import java.util.*;/*public class ListNode {    int val;    ListNode next = null;    ListNode(int val) {        this.val = val;    }}*//*public class TreeNode {    int val = 0;    TreeNode left = null;    TreeNode right = null;    public TreeNode(int val) {        this.val = val;    }}*/public class TreeLevel {    public ListNode getTreeLevel(TreeNode root, int dep) {        // write code here        ListNode Head = new ListNode(-1);        ListNode pHead = Head;        ArrayList<Integer> data = new ArrayList<>();        Queue<TreeNode> queue = new LinkedList<>();        queue.add(root);        int count = 1;        while(!queue.isEmpty())        {            int len = queue.size();            int index = 0;            ArrayList<Integer> list = new ArrayList<>();            while(index++<len)            {                TreeNode treeNode = queue.poll();                list.add(treeNode.val);                if(treeNode.left!=null) queue.add(treeNode.left);                if(treeNode.right!=null)queue.add(treeNode.right);            }            if(count==dep)            {                data = list;                break;            }            count++;        }        for (int i = 0; i < data.size(); i++) {            pHead.next = new ListNode(data.get(i));            pHead = pHead.next;        }        return Head.next;    }}


0 0
原创粉丝点击