二叉树的非递归遍历
Posted blythe
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的非递归遍历相关的知识,希望对你有一定的参考价值。
// 先序遍历非递归 public static void preOrder2(BinTree t) { Stack<BinTree> s = new Stack<BinTree>(); while (t != null || !s.empty()) { while (t != null) { System.out.print(t.date); s.push(t); t = t.lchild; } if (!s.empty()) { t = s.pop(); t = t.rchild; } } } // 中序遍历非递归 public static void InOrder2(BinTree t) { Stack<BinTree> s = new Stack<BinTree>(); while (t != null || !s.empty()) { while (t != null) { s.push(t); t = t.lchild; } if (!s.empty()) { t = s.pop(); System.out.print(t.date); t = t.rchild; } } } // 后序遍历非递归 public static void PostOrder2(BinTree t) { Stack<BinTree> s = new Stack<BinTree>(); Stack<Integer> s2 = new Stack<Integer>(); Integer i = new Integer(1); while (t != null || !s.empty()) { while (t != null) { s.push(t); s2.push(new Integer(0)); t = t.lchild; } while (!s.empty() && s2.peek().equals(i)) { s2.pop(); System.out.print(s.pop().date); } if (!s.empty()) { s2.pop(); s2.push(new Integer(1)); t = s.peek(); t = t.rchild; } } }
public void thePostOrderTraversal_Stack(Node root) { //后序遍历 Stack<Node> stack = new Stack<Node>(); Stack<Node> output = new Stack<Node>();//构造一个中间栈来存储逆后序遍历的结果 Node node = root; while (node != null || stack.size() > 0) { if (node != null) { output.push(node); stack.push(node); node = node.getRightNode(); } else { node = stack.pop(); node = node.getLeftNode(); } } System.out.println(output.size()); while (output.size() > 0) { printNode(output.pop()); } }
以上是关于二叉树的非递归遍历的主要内容,如果未能解决你的问题,请参考以下文章