题目
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
实现
public class TreeLevel {
public Node getTreeLevel(BinaryTreeNode root, int dep) {
if(root==null || dep<1){
return null;
}
Queue<BinaryTreeNode> queue = new ArrayDeque<BinaryTreeNode>();
queue.add(root);
while (!queue.isEmpty() && dep>1){
int len = queue.size();
for(int i=0;i<len;i++){
BinaryTreeNode temp = queue.poll();
if(temp.left!=null){
queue.add(temp.left);
}
if(temp.right!=null){
queue.add(temp.right);
}
}
dep--;
}
Node head = new Node(queue.poll().value);
Node temp = head;
while (!queue.isEmpty()){
temp.next = new Node(queue.poll().value);
temp=temp.next;
}
return head;
}
public Node getTreeLevel2(BinaryTreeNode root, int dep) {
if(root==null || dep<1){
return null;
}
Queue<BinaryTreeNode> queue = new ArrayDeque<BinaryTreeNode>();
queue.add(root);
int current_dep =1;
int current_num =1;
int next_num =0;
BinaryTreeNode current_node = null;
while (!queue.isEmpty()){
if(current_dep==dep){
break;
}
current_node = queue.poll();
current_num--;
if(current_node.left!=null){
queue.add(current_node.left);
next_num++;
}
if(current_node.right!=null){
queue.add(current_node.right);
next_num++;
}
if(current_num==0){
current_num = next_num;
next_num=0;
current_dep++;
}
}
Node head = new Node(queue.poll().value);
Node temp = head;
while (!queue.isEmpty()){
temp.next = new Node(queue.poll().value);
temp=temp.next;
}
return head;
}
}
class Node {
int value;
Node next;
public Node(int value){
this.value=value;
}
public Node(){
}
}
class BinaryTreeNode {
int value;
BinaryTreeNode left;
BinaryTreeNode right;
public BinaryTreeNode() {
}
public BinaryTreeNode(int val) {
this.value = val;
}
}