二叉树的遍历以及按层打印
2017-08-15 17:46
399 查看
遍历二叉树
二叉树
public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } }
遍历
public static void printTree(TreeNode root) { // Queue<TreeNode> quere = new LinkedList<TreeNode>(); TreeNode tmp = root; quere.offer(tmp); while (quere.size() != 0) { tmp = quere.poll(); System.out.println(tmp.val); if (tmp.left != null) { quere.offer(tmp.left); } if (tmp.right != null) { quere.offer(tmp.right); } } } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); TreeNode left2 = root.left; TreeNode right2 = root.right; left2.left = new TreeNode(4); right2.left = new TreeNode(5); right2.right = new TreeNode(6); TreeNode left3 = right2.left; left3.left = new TreeNode(7); left3.right = new TreeNode(8); printTree(root); }
运行结果
按照层次来打印
主要是需要考虑换行
需要2个变量
last 表示正在打印的当前行的最右节点
nlast 表示下一行的最右节点
如果当前打印的和last相等 就应该换行
换行 last =nlast
public static int[][] printTree(TreeNode root) { List<List<TreeNode>> result = new ArrayList<List<TreeNode>>(); List<TreeNode> li = new ArrayList<TreeNode>(); Queue<TreeNode> quere = new LinkedList<TreeNode>(); TreeNode tmp = root; TreeNode last = root; TreeNode nlast = null; quere.offer(tmp); while (quere.size() != 0) { tmp = quere.poll(); li.add(tmp); if (tmp.left != null) { quere.offer(tmp.left); nlast = tmp.left; } if (tmp.right != null) { quere.offer(tmp.right); nlast = tmp.right; } if (tmp.val == last.val) { last = nlast; result.add(li); li = new ArrayList<TreeNode>(); } } int[][] resultarr = new int[result.size()][]; for (int i = 0; i < result.size(); i++) { int[] a = new int[result.get(i).size()]; for (int j = 0; j < result.get(i).size(); j++) { a[j] = result.get(i).get(j).val; } resultarr[i] = a; } return resultarr; } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); TreeNode left2 = root.left; TreeNode right2 = root.right; left2.left = new TreeNode(4); right2.left = new TreeNode(5); right2.right = new TreeNode(6); TreeNode left3 = right2.left; left3.left = new TreeNode(7); left3.right = new TreeNode(8); int[][] printTree = printTree(root); for (int[] string : printTree) { System.out.println(); for (int i : string) { System.out.print(i); } } }
运行结果
相关文章推荐
- 二叉树的七种遍历方式以及按行打印
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- 二叉树的遍历,深度求解以及竖向打印详析
- 二叉树的遍历以及将二叉树倒置90°打印输入(递归)
- 二叉树 的先序 中序、后序遍历、层次遍历以及树状打印等操作
- 数据结构_求二叉树的高度以及层次遍历二叉树算法_C语言源代码
- 剑指Offer_面试题23_从上到下打印二叉树(层序遍历)
- 二叉树的建立,以及递归前中后序遍历二叉树
- 【leetcode Java】二叉树的递归遍历以及最大深度的求解(Java)
- java实现二叉树的构建以及3种遍历方法(转)
- 二叉树的创建、先序、中序以及后序遍历
- 二叉树的遍历以及重建(Python实现)
- 图说二叉树添加数据原理以及遍历原理
- <剑指offer 面试题7-1>构建二叉树以及实现遍历 Java
- 二叉树按层遍历打印的算法(c/c++)
- Java实现二叉树建立以及三种遍历
- Java 实现二叉树的构建以及3种遍历方法
- 遍历二叉树的递归算法与非递归算法以及C语言实现
- 用批处理遍历打印文件夹以及删除空文件夹
- 二叉树的(按行打印)层序遍历,树的高度,判断是否为平衡二叉树