数据结构-树前序遍历、中序遍历、后序遍历的递归与非递归方法java
2020-03-06 20:00
239 查看
package test;import java.util.Stack;class Node {int val;Node left = null;Node right = null;Node(int val) {this.val = val;}}public class Tree {// 1.深度优先 2.广度优先// 深度优先:1.先序2.中序3.后序// 1.递归先序public void preRootTraversalR(Node root) {if (root == null) {return;}System.out.println(root.val);preRootTraversalR(root.left);preRootTraversalR(root.right);}// 2.非递归先序public void preRootTraversal(Node root) {if (root == null) {return;}Stack stack = new Stack<>();Node temp = root;while (temp != null || !stack.empty()) {while (temp != null) {System.out.println(temp.val);stack.add(temp);temp = temp.left;}temp = stack.pop().right;}}// 3.非递归中序public void mid(Node root) {if (root == null) {return;}Stack stack = new Stack<>();Node temp = root;while (temp != null || !stack.empty()) {while (temp != null) {stack.push(temp);temp = temp.left;}Node peek = stack.pop();System.out.println(peek.val);temp = peek.right;}}// 4.非递归后序---------------public void after(Node root) {if (root == null) {return;}Stack stack = new Stack<>();Node temp = root;while (temp != null || !stack.empty()) {while (temp != null) {stack.push(temp);// stack.push(temp.right);temp = temp.left;}Node peek = stack.peek();temp = peek.right;// 判断右边有没有,有的话继续下一次循环,没有的话,就输出if (peek.right == null) {System.out.println(peek.val);peek = stack.pop();// 判断此时的输出的节点是否等于栈顶右边的节点,是的话就输出,说明是右边的节点,不是的话说明是左边的节点while (!stack.empty() && peek == stack.peek().right) {peek = stack.pop();System.out.println(peek.val);}}}}public static void main(String[] args) {// 1// 2 3// 4 5 6 7// 8Node node1 = new Node(1);Node node2 = new Node(2);Node node3 = new Node(3);Node node4 = new Node(4);Node node5 = new Node(5);Node node6 = new Node(6);Node node7 = new Node(7);Node node8 = new Node(8);node1.left = node2;node1.right = node3;node2.left = node4;node2.right = node5;node3.left = node6;node3.right = node7;node6.right = node8;Tree tree = new Tree();tree.after(node1);}}
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 数据结构——使用非递归方法后序遍历二叉树
- 数据结构 分别用递归和非递归方法实现二叉树先序,中序,后序遍历
- 再回首,数据结构——树的先序、中序、后序遍历的递归与非递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- 数据结构作业:利用中序遍历和后序遍历构建二叉树(RMQ转LCA)
- Java实现二叉树的前序、中序、后序、层序遍历(递归方法)
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果
- (编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(非递归)
- 数据结构——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- java二叉树的遍历,递归与非递归方法
- 【数据结构基础】非递归后序遍历二叉树
- 数据结构之二叉树的前序遍历、中序遍历、后序遍历、层序遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- (编程训练)再回首,数据结构——二叉树的前序、中序、后序遍历(递归)
- 二叉树创建、前序遍历、中序遍历、后序遍历 的 递归与非递归实现 以及 层次遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- Java实现二叉树的前序、中序、后序、层序遍历(非递归方法)
- 数据结构 — 实现二叉树的前序,中序,后序遍历(非递归)
- c++实现二叉树的先序遍历,中序遍历,后序遍历(递归方法)及运行实例结果