前一篇文章写的是汉诺塔,如果还是对汉诺塔没有有疑问的,那么,下面的三种二叉树的遍历会进一步帮助我们理解汉诺塔;
树:
二叉树的遍历:1,先序遍历;2,中序遍历;3,后序遍历;
上示例代码:
/**
* 二叉树
*/
public class Binaray {
Node<String> root;
public Binaray(String data) {
root = new Node<>(data, null, null);
}
public void createTree(){
/**
* root
* B C
* D E F G
* H
*
*/
Node<String> nodeB = new Node<>("B", null, null);
Node<String> nodeC = new Node<>("C", null, null);
Node<String> nodeD = new Node<>("D", null, null);
Node<String> nodeE = new Node<>("E", null, null);
Node<String> nodeF = new Node<>("F", null, null);
Node<String> nodeG = new Node<>("G", null, null);
Node<String> nodeH = new Node<>("H", null, null);
root.leftChild = nodeB;
root.rightChild = nodeC;
nodeB.leftChild = nodeD;
nodeB.rightChild = nodeE;
nodeC.leftChild = nodeF;
nodeC.rightChild = nodeG;
nodeD.leftChild = nodeH;
}
/**
* 节点
*/
public class Node<T>{
String data;
/**
* 左孩子和右孩子
*/
Node<T> leftChild;
Node<T> rightChild;
public Node(String data, Node<T> leftChild, Node<T> rightChild) {
this.data = data;
this.leftChild = leftChild;
this.rightChild = rightChild;
}
}
/**
* 中序遍历
* @param root
*/
public void midOrderTraverse(Node root){
if (null == root){
return;
}
midOrderTraverse(root.leftChild);
System.out.println("mid" + root.data);
midOrderTraverse(root.rightChild);
}
/**
* 前序遍历
* @param root
*/
public void preOrderTraverse(Node root){
if (null == root){
return;
}
System.out.println("pre" + root.data);
preOrderTraverse(root.leftChild);
preOrderTraverse(root.rightChild);
}
/**
* 后序遍历
* @param root
*/
public void lastOrderTraverse(Node root){
if (null == root){
return;
}
lastOrderTraverse(root.leftChild);
lastOrderTraverse(root.rightChild);
System.out.println("last" + root.data);
}
}
测试代码:
@Test
public void testBinarayTree(){
Binaray binaray = new Binaray("A");
binaray.createTree();
// binaray.midOrderTraverse(binaray.root);
// binaray.preOrderTraverse(binaray.root);
binaray.lastOrderTraverse(binaray.root);
}