二叉树的遍历

来源:互联网 发布:世界各地社交软件 编辑:程序博客网 时间:2024/06/10 01:01

1、节点定义

public class Node{int data;Node leftChild;Node rightChild;}
2、先序遍历,递归算法

void preOrder(Node node) {if(node != null) {visit(node);preOrder(node.leftChild);preOrder(node.rightChild);}}

3、中序遍历,递归算法

void inOrder(Node node) {if(node != null) {inOrder(node.leftChild);visit(node);inOrder(node.rightChild);}}

4、后续遍历,递归算法

void postOrder(Node node) {if(node != null) {postOrder(node.leftChild);postOrder(node.rightChild);visit(node);}}

5、先序遍历,非递归算法

void preOrder(Node node) {List<Node> list = new ArrayList();if(node != null) {list.add(node);while(list.length > 0) {Node p = list.get(list.length - 1);list.remove(list.length - 1);visit(p);if(p.rightChild != null) {list.add(p.rightChild);}if(p.leftChild != null) {list.add(p.leftChild);}}}}

6、中序遍历,非递归算法

void inOrder(Node node) {List<Node> list = new ArrayList();if(node != null) {Node p = node;while(list.length > 0 || p != null) {while(p != null) {list.add(p);p = p.leftChild;}if(list.length > 0) {p = list.get(list.length - 1);list.remove(list.length - 1);visit(p);p = p.rightChild;}}}}

7、后序遍历,非递归算法

void postOrder(Node node) {List<Node> list = new ArrayList();if(node != null) {Node p = node;while(list.length > 0 || p != null) {while(p != null) {list.add(p);p = p.leftChild;}if(list.length > 0) {p = list.get(list.length - 1);if(p.rightChild == null) {list.remove(length - 1);visit(p);} else {p = p.rightChild;}}}}}