二叉树的广度遍历算法
来源:互联网 发布:玉田二中网络优盘 编辑:程序博客网 时间:2024/05/22 07:07
为这个题已经想了几天了,可能存在惯性思维的障碍所以一直想从递归的方式去处理,但是这个情况不太一样,用递归实在是很难找到思路,后来又转变思路,每层添加的节点放到集合里,然后去遍历集合打印左右子树然后又把子树添加到一个新集合里,这样直到打印到新建的集合没有节点为止。这里还可以继续优化,也是就放每层节点的集合每次打印完可以清空下一层继续用,不用去再生成集合。
以下我功能的实现。
public class PrintTree { //主函数测试 public static void main(String args[]) { TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(4); root.right.right = new TreeNode(5); ArrayList<Integer> list = PrintFromTopToBottom(root); //打印出广度遍历 for(int i : list) { System.out.println(i); } } /* * 从上到下打印二叉树,广度遍历 */ /* * 思路就是每次添加左右子树,然后保存在第二个列表里,然后再去遍历这个内层节点的左右值 */ public static ArrayList<Integer> PrintFromTopToBottom(TreeNode root) { //如果二叉树为空 if(root == null) { //返回一个空的列表 return new ArrayList<Integer>(); } else { //初始化列表 ArrayList<Integer> list = new ArrayList<Integer>(); TreeNode p = root;//定义指针 //添加该引用节点的值 list.add(p.val); while(p.left != null || p.right != null) { //定义一个存放所有同层节点的列表 ArrayList<TreeNode> list2 = new ArrayList<TreeNode>(); if(p.left != null) { list.add(p.left.val); list2.add(p.left); } if(p.right != null) { list.add(p.right.val); list2.add(p.right); } //p2指向下一层的从左到右的第一个节点 TreeNode p2 = null; for(TreeNode treeNode : list2) { if(treeNode.left != null) { list.add(treeNode.left.val); if(p2 == null) { p2 = treeNode.left; } } if(treeNode.right != null) { list.add(treeNode.right.val); if(p2 == null) { p2 = treeNode.right; } } } //p指向下一层的第一个节点 p = p2; } return list; } }}//定义个二叉树class TreeNode{ int val; TreeNode left; TreeNode right; TreeNode(int val) { this.val = val; } }
0 0
- 二叉树的广度遍历算法
- 数据结构 - 二叉树的广度优先遍历算法(C++)
- 【算法导论】二叉树的广度优先遍历
- 【数据结构与算法】二叉树广度遍历
- 广度遍历二叉树
- 广度遍历二叉树
- 二叉树广度遍历
- 二叉树的广度优先遍历
- 二叉树的深度广度遍历
- 二叉树的广度优先遍历
- 二叉树的广度与深度遍历
- 二叉树的深度广度遍历
- 二叉搜索树的广度优先遍历
- 【Java】关于二叉树的广度优先遍历及完全二叉树判定算法
- 一步一步写算法(之二叉树广度遍历)
- 一步一步写算法(之二叉树广度遍历)
- 二叉树的定义、前序遍历、广度遍历
- 二叉树的广度遍历和深度遍历()
- CDC之CreateCompatibleDC与BitBlt
- PS AD命令之Remove-adcomputer!
- 二叉树的存储结构
- 中兴通讯面试经历
- 使用Symbolicatecrash和xcrun atos分析crash log
- 二叉树的广度遍历算法
- jar 独立运行文件制作(于windows平台)
- MAVEN环境搭建中遇到的问题及解决方案
- 安卓入门小程序
- 使nginx支持重写规则
- Web开发人员不容错过的10大JavaScript工具
- Eclipse Color Theme 颜色主题插件
- (转载)XML和JSON两种数据交换格式的比较
- 应用程序生命周期的备忘