二叉树的遍历以及按层打印
来源:互联网 发布:mysql数据库连接 编辑:程序博客网 时间:2024/05/29 04:48
遍历二叉树
二叉树
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); } } }
运行结果
阅读全文
0 0
- 二叉树的遍历以及按层打印
- 按层打印二叉树的节点【层次遍历变形】
- 关于二叉树的按层打印
- 二叉树的按层遍历
- 二叉树按层遍历并按层打印和蛇形打印
- 二叉树(按层建立二叉树,前中后序以及按层遍历)
- 二叉树的层遍历
- 二叉树的按层打印和ZigZag打印
- 二叉树的按层打印与ZigZag打印
- 按层打印二叉树
- 按层打印二叉树
- 按层打印二叉树
- 按层打印二叉树
- 按层打印二叉树
- 按层打印二叉树
- 二叉树的七种遍历方式以及按行打印
- 二叉树的前序,中序,后序的递归与非递归遍历以及按层遍历
- 按层遍历二叉树
- Java---12种常见异常体系图
- 老司机谈APK瘦身套路-项目优化篇
- js秒转换成时分秒
- C++虚构函数的使用
- 免费的VLC for Android 源码下载
- 二叉树的遍历以及按层打印
- 在Ubuntu/Linux环境下使用MySQL:解决在Linux环境下MySQL中文乱码的问题
- 嵌入式学习26(数据结构 树)
- SVM的学习历程
- 自定义控件之绘图篇:区域(Region)
- 点击编辑按钮 选择并且删除recyclerview的item条目操作
- CSS3 Transitions, Transforms和Animation使用简介与应用展示
- Browser-sync浏览器同步测试工具
- J2EE学习笔记(五)之Servlet中的Filter过滤器