面试准备--二叉树的非递归遍历(Java版)
来源:互联网 发布:缺血半暗带的算法 编辑:程序博客网 时间:2024/05/29 06:28
函数是写在树类中.
前序和中序都是差不多,不过在于输出的顺序而已.
1. 前序在遍历最左节点时,边遍历边输出.
2. 中序在取出栈顶元素和放入右子树之间时输出.
//中序非递归遍历二叉树public ArrayList<Integer> zsort(){ Stack<Node> s = new Stack<Node>(); ArrayList<Integer> q = new ArrayList<Integer>(); Node p; s.add(root); while(!s.empty()){ p = s.peek(); while(p!=null){ s.push(p.getLeft()); p = p.getLeft(); } s.pop(); if(!s.empty()){ p = s.pop(); q.add(p.getData()); s.push(p.getRight()); } } return q; }
//非递归前序遍历二叉树 public ArrayList<Integer> qsort(){ Stack<Node> s = new Stack<Node>(); ArrayList<Integer> q = new ArrayList<Integer>(); Node p; s.push(root); while(!s.empty()){ p = s.peek(); while(p!=null){ q.add(p.getData()); s.push(p.getLeft()); p = p.getLeft(); } s.pop(); if(!s.empty()){ p = s.pop(); s.push(p.getRight()); } } return q; }
后序遍历比较麻烦,要保证左右子树必须在根节点之前遍历输出.遍历根节点的条件:无左右子树或者已经遍历了左右子树(遍历的前一个节点就是左右子树).右子树先进栈,这样在出栈的时候就是左子树先出栈.
//非递归后序遍历二叉树 public ArrayList<Integer> hsort(){ Stack<Node> s = new Stack<Node>(); ArrayList<Integer> q = new ArrayList<Integer>(); Node now = null; Node pre = null; s.push(root); while(!s.empty()){ now = s.peek(); if((now.getLeft() == null && now.getRight() == null) || (pre != null &&( pre == now.getLeft() || pre == now.getRight() ) ) ){ q.add(now.getData()); s.pop(); pre = now; } else { if(now.getRight()!=null){ s.push(now.getRight()); } if(now.getLeft()!=null){ s.push(now.getLeft()); } } } return q; }
0 0
- 面试准备--二叉树的非递归遍历(Java版)
- java二叉树的非递归遍历
- java 二叉树的递归遍历和非递归遍历
- 二叉树遍历的非递归实现(java版)
- JAVA递归、非递归遍历二叉树
- java递归,非递归遍历二叉树
- JAVA递归、非递归遍历二叉树
- 二叉树的递归与非递归遍历(Java描述)
- 二叉树的递归与非递归遍历(Java描述)
- Java实现二叉树的递归与非递归遍历
- 二叉树的遍历(递归、非递归) java
- Java实现二叉树的创建、递归/非递归遍历
- 二叉树的递归,非递归遍历(java)
- 二叉树的递归和非递归遍历(java)
- Java实现二叉树的递归、非递归遍历
- java二叉树的遍历,递归与非递归方法
- 面试准备之--二叉树的递归与非递归方式
- 二叉树的递归,非递归遍历
- poj 1131 (小数)十进制转八进制
- android之壁纸机制
- 2016 ACM/ICPC Asia Regional Shenyang Online HDU 5895 Mathematician QSC(矩阵快速幂+高次幂取模)★ ★
- 3. Longest Substring Without Repeating Characters
- go库中自带的反向代理功能和内网代理
- 面试准备--二叉树的非递归遍历(Java版)
- js模拟手机滑动页面
- 用ADT的FileExplorer查看android手机中的数据库
- LeetCode: Majority Element
- hdu 3555 Bomb 【数位DP】
- 今日get的新技能
- android之壁纸机制
- listview 在不改变数据源的情况下 刷新adapter 的解决办法
- 机器学习实战笔记2(k-近邻算法)