非递归方式遍历二叉树
Posted 误入IT界的农民工
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了非递归方式遍历二叉树相关的知识,希望对你有一定的参考价值。
/** * 非递归方式的先根序 * @param root */ public static void preOrder(Node root){ Stack<Node> stack = new Stack<Node>(); while (!stack.isEmpty() || root != null) { while (root != null) { System.out.println(root.data); stack.push(root); root = root.left; } if (!stack.isEmpty()) { root = stack.pop(); root = root.right; } } } /** * 非递归的方式中根序遍历二叉树 * @param node */ public static void orderBinaryTree(Node node) { Stack<Node> stack = new Stack<Node>(); Node point = node; while (!stack.isEmpty() || point != null) { //如果左子树不为空,则一直入栈 if (point != null) { stack.push(point); point = point.left; } else { point = stack.peek(); visit(point); point = point.right; stack.pop(); } } } /** * 非递归方式后根序 * @param node */ public static void lastOrder(Node node) { Stack<Node> stackNode = new Stack<Node>(); Stack<Integer> stackInt = new Stack<Integer>(); int i = 1; while (!stackNode.isEmpty() || node != null) { while(node != null) { stackNode.push(node); stackInt.push(0); node = node.left; } while (!stackNode.isEmpty() && stackInt.peek() == i) { stackInt.pop(); System.out.println(stackNode.pop().data); } if (!stackNode.isEmpty()) { stackInt.pop(); stackInt.push(1); node = stackNode.peek(); node = node.right; } } }
创建一棵二叉树:
public class Node { Node left = null; Node right = null; Integer data; /** * * @param root */ public Node() { this.left = null; this.right = null; this.data = null; } public Node(Integer data) { this.left = null; this.right= null; this.data = data; } }
以上是关于非递归方式遍历二叉树的主要内容,如果未能解决你的问题,请参考以下文章