JAVA数据结构与算法第五天(五)
前一篇文章写的是汉诺塔,如果还是对汉诺塔没有有疑问的,那么,下面的三种二叉树的遍历会进一步帮助我们理解汉诺塔;
树:
二叉树的遍历: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); }