题目:
对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。
给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。
解答:
方法1:层次遍历
import java.util.*;
public class TreeLevel {
public ListNode getTreeLevel(TreeNode root, int dep) {
// write code here
if(root==null) return null;
Queue<TreeNode> que=new LinkedList<TreeNode>();
int len=0,i;
que.add(root);
while(dep>1&&!que.isEmpty()){
len=que.size();
for(i=0;i<len;i++){
TreeNode p=que.poll();
if(p.left != null)
que.add(p.left);
if(p.right != null)
que.add(p.right);
}
dep--;
}
ListNode res=new ListNode(que.poll().val);
ListNode tem=res;
while(!que.isEmpty()){
tem.next=new ListNode(que.poll().val);
tem=tem.next;
}
return res;
}
}
方法二:递归方法
public class TreeLevel {
ListNode ln = new ListNode(-1);
ListNode p = ln;
public ListNode getTreeLevel(TreeNode root, int dep) {
// write code here
if (root == null || dep <= 0)
return null;
if (dep == 1) {
p.next = new ListNode(root.val);
p = p.next;
} else {
getTreeLevel(root.left, dep - 1);
getTreeLevel(root.right, dep - 1);
}
return ln.next;
}
}