二叉树遍历(先序遍历、中序遍历、后序遍历)——递归方法和非递归方法
来源:互联网 发布:知乎宣传片 编辑:程序博客网 时间:2024/04/30 12:58
注:本文来自 左程云的书《程序员代码面试指南》
题目:
分别用递归和非递归方法,实现二叉树的先序遍历(根左右)、中序遍历(左根右)、后序遍历(左右根)。
// 二叉树节点class Node {public int value;public Node left;public Node right;public Node(int value) {this.value = value;}}
(1)先序遍历
public void preOrderRecur(Node root) {if(root == null) {return;}//先输出根节点的值System.out.println(root.value + " ");//递归左子树preOrderRecur(root.left);//递归右子树preOrderRecur(root.right);}
public void inOrderRecur(Node root) {if(root == null) {return;}inOrderRecur(root.left);System.out.println(root.value + " ");inOrderRecur(root.right);}
public void posOrderRecur(Node root) {if(root == null) {return;}posOrderRecur(root.left);posOrderRecur(root.right);System.out.println(root.value + " ");}
使用自定义的栈来代替递归栈。
(1)先序遍历
public void preOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack = new Stack<>();//辅助栈stack.add(root);while(!stack.isEmpty()) {curNode = stack.pop();System.out.println(curNode.value + " ");if(curNode.right != null) {stack.push(curNode.right);}if(curNode.left != null) {stack.push(curNode.left);}}}}
(2)中序遍历
public void inOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack = new Stack<>();//辅助栈while(!stack.isEmpty() || curNode != null) {if(curNode != null) {stack.push(curNode);curNode = curNode.left;}else {curNode = stack.pop();//输出System.out.println(curNode.value + " ");curNode = curNode.right;}}}}
(3)后序遍历
方法一:使用 两个 辅助栈
public void posOrderUnRecur(Node root) {if(root != null) {Node curNode = root;//当前节点Stack<Node> stack1 = new Stack<>();Stack<Node> stack2 = new Stack<>();stack1.push(curNode);while(!stack1.isEmpty()) {curNode = stack1.pop();stack2.push(curNode);if(curNode.left != null) {stack1.push(curNode.left);}if(curNode.right != null) {stack1.push(curNode.right);}}//弹出stack2中所有元素while(!stack2.isEmpty()) {System.out.println(stack2.pop().value + " ");}}}
//TODO
阅读全文
0 0
- 二叉树遍历(先序遍历、中序遍历、后序遍历)——递归方法和非递归方法
- 二叉树 非递归 先序遍历 中序遍历 后序遍历 层次遍历
- 二叉树的先序、中序、后序递归遍历和非递归遍历
- 二叉树的先序、中序、后序遍历方法(递归与非递归方法)——《数据结构》
- 二叉树先序遍历,中序遍历,后序遍历递归非递归方法
- 二叉树非递归先序遍历、中序遍历、后序遍历
- 先序遍历,中序遍历的非递归方法
- 二叉树的先序,中序,后序及其非递归遍历的方法
- 二叉树的先序遍历非递归实现方法
- 数据结构之 非递归方法先序遍历二叉树
- 先序遍历二叉树的非递归方法
- 二叉树的遍历(2)--先序遍历,中序遍历,后序遍历(非递归)
- 递归法遍历二叉树 (先序遍历 中序遍历 后序遍历)
- 二叉树的先序、中序、后序遍历的递归和非递归实现
- 二叉树的创建和先序,中序,后序,递归,非递归遍历
- 二叉树非递归和递归遍历(先序,中序,后序)
- 先序遍历中序遍历后序遍历确定一棵二叉树(递归、非递归)
- 二叉树的先序遍历、中序遍历以及后序遍历(递归以及非递归方式)
- 三极管最简单易懂原理总结
- CAD在线预览思路
- 【C#】如何实现一个迭代器
- java项目读取以及写入properties文件
- 快速体验Percona XtraDB Cluster(PXC)
- 二叉树遍历(先序遍历、中序遍历、后序遍历)——递归方法和非递归方法
- 使用JS进行图片懒加载
- 第一行代码Android第二章读书笔记
- 解决chrome浏览器表单自动填充导致input文本框背景变成偏黄色的问题
- VS2012+qt5.2.0+OpenCv3.0环境的搭建配置
- 派生类和基类之间的关系
- 2017、5、13日省赛前组队训练赛。
- 编译tensorflow下的android例子
- Dubbo——Exchange信息交换层