二叉树实现中序遍历(迭代版)
2017-11-05 11:50
162 查看
二叉树实现
二叉树实现代码中序遍历顺序
首先访问当前节点的左子树(如果存在)再访问当前节点
最后访问右子树(如果存在)
中序遍历图解
中序遍历代码思路
中序遍历可分解为d+1段沿最左侧通路自底而上访问各节点
借助辅助栈,将访问的节点放入栈中
自底而上遍历对应的右子树
当右子树中存在左子树时,继续进入左子树向下访问
中序遍历代码
//子树中序遍历 public ArrayList<E> travIn() { LinkedList<Node<E>> stack = new LinkedList<Node<E>>();//辅助栈 ArrayList<E> al = new ArrayList<E>(); Node<E> x = this; while(true) { goAlongLeftBreanch(x,stack); if(stack.isEmpty()) return al; x = stack.pop(); al.add(x.e); x = x.rc; } } rivate void goAlongLeftBreanch(Node<E> x,LinkedList<Node<E>> s) { while(x != null) { s.push(x); //将左分支压入栈 x = x.lc; } }
迭代版与递归版比较
递归版遍历算法时间、空间复杂度的常系数,相对于迭代版更大。递归版本代码相对于迭代版本更加简明
参考资料
数据结构(c++语言版)(第三版)邓俊辉 编著
相关文章推荐
- 二叉树先序遍历,中序遍历和后序遍历的非递归实现
- 二叉树的中序遍历,递归实现与循环实现
- 实现二叉树的先序遍历、中序遍历、后序遍历
- 杂七杂八——C#实现二叉树,外带中序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 二叉树的实现&&递归和非递归方式前序、中序、后续遍历&&发现一个节点中序遍历的下一节点
- 面试题 二叉树的前序遍历,中序遍历,后序遍历(递归实现)
- java实现根据前序遍历构建二叉树(前序遍历、中序遍历、后序遍历)
- 已知二叉树前序,中序遍历,求后序遍历,java实现
- 杂七杂八——C#实现二叉树,外带中序遍历
- C++实现二叉树 前序遍历, 后序遍历, 中序遍历, 层序遍历(不用递归)
- 二叉树的非递归实现中序遍历
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 数据结构-----中序遍历二叉树非递归算法(利用堆栈实现)
- 二叉树的创建(先序创建的)及先序遍历 中序遍历 后序遍历的递归和非递归实现
- 利用非递归方法实现二叉树的中序遍历
- 二叉树的中序遍历(非递归实现)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- 组合模式实现二叉树先序遍历,中序遍历和后序遍历
- 【LintCode-67】二叉树的中序遍历(Java实现-递归算法/非递归算法)