数据结构—二叉树的四种遍历
来源:互联网 发布:mac mini更换固态硬盘 编辑:程序博客网 时间:2024/06/06 10:00
今天复习到数据结构中的二叉树,就把二叉树的遍历(非递归) 实现了一下,感觉记录下来还是很必要的,希望每天能进步一点点。
二叉树遍历:
前序遍历:根左右(栈实现);
中序遍历:左根右(栈实现);
后序遍历:左右根(栈实现);
层次遍历:从上往下遍历(队列实现);
首先,先定义一个二叉树。
//树节点public class BinaryTreeNode {private int element;private BinaryTreeNode left;private BinaryTreeNode right;public BinaryTreeNode(int element) {//super();this.element = element;}public BinaryTreeNode(int element, BinaryTreeNode left, BinaryTreeNode right) {//super();this.element = element;this.left = left;this.right = right;}public int getElement() {return element;}public void setElement(int element) {this.element = element;}public BinaryTreeNode getLeft() {return left;}public void setLeft(BinaryTreeNode left) {this.left = left;}public BinaryTreeNode getRight() {return right;}public void setRight(BinaryTreeNode right) {this.right = right;}}以下分别介绍介绍二叉树的四种遍历方法
1.前序遍历
public static void preOrder(BinaryTreeNode bt){Stack<BinaryTreeNode> stack=new Stack<BinaryTreeNode>();if(bt!=null){stack.push(bt);while(!stack.empty()){BinaryTreeNode t=stack.pop();System.out.print(t.getElement()+",");if(t.getRight()!=null){stack.push(t.getRight());}if(t.getLeft()!=null){stack.push(t.getLeft());}}}}
2.中序遍历
public static void InOrder(BinaryTreeNode bt){Stack<BinaryTreeNode> stack=new Stack<BinaryTreeNode>();BinaryTreeNode cur=bt;while(cur!=null||stack.size()>0){while(cur!=null){stack.push(cur);cur=cur.getLeft();}if(stack.size()>0){cur=stack.pop();System.out.print(cur.getElement()+" ");cur=cur.getRight();}}}
3.后续遍历
public static void postOrder(BinaryTreeNode bt){Stack<BinaryTreeNode> stack=new Stack<>();BinaryTreeNode t=bt;BinaryTreeNode prev=bt;while(t!=null||stack.size()>0){while(t!=null){stack.push(t);t=t.getLeft();}if(stack.size()>0){BinaryTreeNode temp=stack.peek().getRight();if(temp==null||temp==prev){t=stack.pop();System.out.print(t.getElement()+" ");prev=t;t=null;}else{t=temp;}}}}4.层次遍历
public static void levelOrder(BinaryTreeNode bt){Queue<BinaryTreeNode> queue=new LinkedList<BinaryTreeNode>();BinaryTreeNode t=bt;if(t!=null)queue.offer(t);while(queue.size()>0){BinaryTreeNode s=queue.poll();System.out.print(s.getElement()+" ");if(s.getLeft()!=null)queue.offer(s.getLeft());if(s.getRight()!=null)queue.offer(s.getRight());}}
0 0
- 数据结构—二叉树的四种遍历
- 《大话数据结构》之二叉树的四种遍历
- 数据结构——二叉树的四种遍历方式(非递归)
- 数据结构学习(四)二叉树的遍历
- 数据结构-二叉树的存储结构和遍历算法(四)
- 数据结构-二叉树的三种遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- 数据结构——二叉树的遍历
- [C++]数据结构:链表二叉树的创建与四种遍历方式
- 二叉树的四种遍历
- 二叉树的四种遍历
- 二叉树的四种遍历实现
- 二叉树的四种遍历方式
- 二叉树的四种遍历算法
- ZOJ2099
- NYOJ 998 解题报告
- 1024. 科学计数法 (20)
- POJ 1849 Two(求树的直径)
- 水平和竖直方向图像拉升
- 数据结构—二叉树的四种遍历
- Linux学习与总结:-2Linux常用命令
- springMVC对异常处理的支持
- Android应用安全测试点滴
- 外键约束
- cenos中vi/vim界面中文乱码解决方法
- android开发之broadcast学习笔记
- Android Studio 如何打JAR包
- TCP/IP协议的详细介绍