对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
<分析>:使用层序遍历,每遍历一层,dep--;当dep==1时,就遍历到了dep层,就可以停止遍历了。
开始将队列中剩下的结点放入到链表中。
Queue队列使用LinkedList
入队offer 出队poll 判断是否为空isEmpty() 判断尺寸size()
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
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(dep>1 && !queue.isEmpty()){
int len = queue.size();
for(int i=0;i<len;i++){
TreeNode node = queue.poll();
if(node.left!=null){
queue.offer(node.left);
}
if(node.right!=null){
queue.offer(node.right);
}
}
dep--;
}
ListNode node = new ListNode(queue.poll().val);
ListNode temp = node;
while(!queue.isEmpty()){
temp.next=new ListNode(queue.poll().val);
temp = temp.next;
}
return node;
}
}