二叉数遍历的三种方法
- 前序遍历,对树中的任意结点来说,先打印这个结点,然后前序遍历它的左子树,最后前序遍历它的右子树。
- 中序遍历,对树中的任意结点来说,先中序遍历它的左子树,然后打印这个结点,最后中序遍历它的右子树。
- 后序遍历,对树中的任意结点来说,先后序遍历它的左子树,然后后序遍历它的右子树,最后打印它本身。
package algorithm.tree;
import lombok.Data;
@Data
public class BinaryTreeNode<T> {
private T value;
private BinaryTreeNode<T> leftChildNode;
private BinaryTreeNode<T> rightChildNode;
public BinaryTreeNode(T value) {
this.value = value;
}
}
package algorithm.tree;
public class BinaryTreeNodeErgodicTest {
public static void main(String[] args) {
BinaryTreeNode<String> rootNode = buildTree();
System.out.println("--------------------- 先序 ---------------------");
preOrderTraverse(rootNode);
System.out.println();
System.out.println("--------------------- 先序 ---------------------");
System.out.println("--------------------- 中序 ---------------------");
inOrderTraverse(rootNode);
System.out.println();
System.out.println("--------------------- 中序 ---------------------");
System.out.println("--------------------- 后序 ---------------------");
postOrderTraverse(rootNode);
System.out.println();
System.out.println("--------------------- 后序 ---------------------");
}
public static void preOrderTraverse(BinaryTreeNode<String> node) {
if (node == null) {
return;
}
System.out.print(node.getValue() + " ");
preOrderTraverse(node.getLeftChildNode());
preOrderTraverse(node.getRightChildNode());
}
public static void inOrderTraverse(BinaryTreeNode<String> node) {
if (node == null) {
return;
}
inOrderTraverse(node.getLeftChildNode());
System.out.print(node.getValue() + " ");
inOrderTraverse(node.getRightChildNode());
}
public static void postOrderTraverse(BinaryTreeNode<String> node) {
if (node == null) {
return;
}
postOrderTraverse(node.getLeftChildNode());
postOrderTraverse(node.getRightChildNode());
System.out.print(node.getValue() + " ");
}
private static BinaryTreeNode<String> buildTree() {
BinaryTreeNode<String> nodeA = new BinaryTreeNode<String>("A");
BinaryTreeNode<String> nodeB = new BinaryTreeNode<String>("B");
BinaryTreeNode<String> nodeC = new BinaryTreeNode<String>("C");
BinaryTreeNode<String> nodeD = new BinaryTreeNode<String>("D");
BinaryTreeNode<String> nodeE = new BinaryTreeNode<String>("E");
BinaryTreeNode<String> nodeF = new BinaryTreeNode<String>("F");
BinaryTreeNode<String> nodeG = new BinaryTreeNode<String>("G");
nodeA.setLeftChildNode(nodeB);
nodeA.setRightChildNode(nodeC);
nodeB.setLeftChildNode(nodeD);
nodeB.setRightChildNode(nodeE);
nodeC.setLeftChildNode(nodeF);
nodeC.setRightChildNode(nodeG);
return nodeA;
}
}