层次打印二叉树
1从上往下打印二叉树
题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 例如,以下二叉树层次遍历的结果为:1,2,3,4,5,6,7
解析:
public ArrayListInteger> PrintFromTopToBottom(TreeNode root) { QueueTreeNode> queue = new LinkedList>(); ArrayListInteger> ret = new ArrayList>(); queue.add(root); //1 while (!queue.isEmpty()) { int cnt = queue.size(); while (cnt-- > 0) { TreeNode t = queue.poll(); //1 if (t == null) continue; ret.add(t.val); //1 queue.add(t.left); //2 queue.add(t.right);//3 } } return ret; } 2把二叉树打印成多行(和上题很相似,不同在于1,23,4567的打印)
解析:
ArrayListArrayListInteger>> Print(TreeNode pRoot) {
ArrayListArrayListInteger>> ret = new ArrayList>();
QueueTreeNode> queue = new LinkedList>();
queue.add(pRoot);
while (!queue.isEmpty()) {
ArrayListInteger> list = new ArrayList>();
int cnt = queue.size();
while (cnt-- > 0) {
TreeNode node = queue.poll();
if (node == null)
continue;
list.add(node.val);
queue.add(node.left);
queue.add(node.right);
}
if (list.size() != 0)
ret.add(list);
}
return ret;
} 3之字形打印二叉树
题目描述
请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印, 第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行 以此类推。
解析:
public ArrayListArrayListInteger>> Print(TreeNode pRoot) {
ArrayListArrayListInteger>> ret = new ArrayList>();
QueueTreeNode> queue = new LinkedList>();
queue.add(pRoot);
boolean reverse = false;
while (!queue.isEmpty()) {
ArrayListInteger> list = new ArrayList>();
int cnt = queue.size();
while (cnt-- > 0) {
TreeNode node = queue.poll();
if (node == null)
continue;
list.add(node.val);
queue.add(node.left);
queue.add(node.right);
}
if (reverse)
Collections.reverse(list);
reverse = !reverse;
if (list.size() != 0)
ret.add(list);
}
return ret;
}
查看22道真题和解析
