二叉树的层次遍历及之形打印算法 Java实现
来源:互联网 发布:熊猫网络电视 编辑:程序博客网 时间:2024/06/05 09:48
最近在面试和学习中发现对于二叉树的层次遍历算法,java语言的实现尚不明确,在查阅资料,总结前人经验的基础上,把算法代码实现记录在此,加深学习理解,方便日后查看。
基于java实现二叉树层次遍历的思想,要借助数据结构队列的先进先出的功能,先将根节点入队,在队不为空的条件下while循环,当前节点是队头节点,将其出队并访问,如果当前节点的左节点不为空将左节点入队,如果当前节点的右节点不为空将其入队。这样保证了出队顺序也是从左到右依次出队。
代码实现如下:
import java.util.LinkedList; public class LevelOrder { public void levelIterator(BiTree root) { if(root == null) { return ; } LinkedList<BiTree> queue = new LinkedList<BiTree>(); BiTree current = null; queue.offer(root);//将根节点入队 while(!queue.isEmpty()) { current = queue.poll();//出队队头元素并访问 System.out.print(current.val +"-->"); if(current.left != null)//如果当前节点的左节点不为空入队 { queue.offer(current.left); } if(current.right != null)//如果当前节点的右节点不为空,把右节点入队 { queue.offer(current.right); } } } }
在二叉树层次遍历的基础上,面试过程中经常会碰到扩展的算法题,按之字形打印二叉树节点,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。
解题思路
- 使用两个辅助栈来分别存储奇数层节点和偶数层节点。
- 注意两个栈的插入顺序是不同的。
- 对于奇数层来说,也就是从左往右的顺序,先添加左子树,然后添加右子树。对于偶数层,刚好相反,先添加右子树,然后添加左子树。
代码实现如下:
import java.util.ArrayList;import java.util.Stack;public class Solution { public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { int level = 1; //s1存奇数层节点 Stack<TreeNode> s1 = new Stack<TreeNode>(); s1.push(pRoot); //s2存偶数层节点 Stack<TreeNode> s2 = new Stack<TreeNode>(); ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); while (!s1.empty() || !s2.empty()) { if (level%2 != 0) { ArrayList<Integer> temp = new ArrayList<Integer>(); while (!s1.empty()) { TreeNode node = s1.pop(); if(node != null) { temp.add(node.val); s2.push(node.left); s2.push(node.right); } } if (!temp.isEmpty()) { list.add(temp); level++; } } else { ArrayList<Integer> temp = new ArrayList<Integer>(); while (!s2.empty()) { TreeNode node = s2.pop(); if(node != null) { temp.add(node.val); s1.push(node.right); s1.push(node.left); } } if (!temp.isEmpty()) { list.add(temp); level++; } } } return list; }}
阅读全文
0 0
- 二叉树的层次遍历及之形打印算法 Java实现
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法。
- JAVA语言实现二叉树的层次遍历的非递归算法及递归算法
- 二叉树的层次遍历----java实现
- 二叉树层次遍历的螺旋打印
- 二叉树的层次遍历(打印)
- 二叉树层次遍历打印
- JAVA实现二叉树的遍历的非递归算法及递归算法(前序,中序,后序,层次)
- java实现二叉树层次遍历
- 把二叉树打印成多行(二叉树的层次遍历)
- 二叉树的层次遍历的算法
- 二叉树的遍历-先序中序后序层次(java实现)
- 【LintCode-69】二叉树的层次遍历(Java实现)
- 剑指offer之求二叉树的深度(非递归的层次遍历)Java实现
- 二叉树的层次遍历算法
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 二叉树的建立及层次遍历及前中后序遍历递归与非递归的实现
- 二叉树的先、中、后序遍历及层次遍历的迭代版算法
- 子控件与父控件的焦点处理
- C Primer Plus 第十二章:储存类别,链接和内存管理
- 持久化,java帝国反击战
- Android判断国家以及系统当前的语言
- laravel各种路径的获取方法
- 二叉树的层次遍历及之形打印算法 Java实现
- 如何用git将项目代码上传到github
- IntelliJ IDEA使用教程 (总目录篇)
- 两大数据库缓存系统实现对比
- app访问webapi数据为null
- 抽象工厂模式
- android edittext password hint字体和普通输入框不同
- matplotlib模块数据可视化-动画
- jqGrid学习笔记