import java.util.*; /** * 類功能描述: 二叉樹遍歷算法Java實現 * * @version 1.0.0 * @auther Create by Barry * @date Create on 2018/3/12. * @history */
public class BinaryTree { private Node root; private BinaryTree(Object data){ this.root = new Node(data, null, null); } /** * 一、 深度優先遍歷 * 1.1 遞歸先序遍歷 */
public void preOrderTraverse(Node root){ System.out.println(root.data); preOrderTraverse(root.leftChild); preOrderTraverse(root.rightChild); } /** * 一、 深度優先遍歷 * 1.2 實現非遞歸先序遍歷 */
public void preOrder(){ Stack stack = new Stack(); System.out.println(root.data); stack.push(root); while(!stack.isEmpty()){ Node element = (Node)stack.pop(); System.out.println(element.data); if(element.rightChild != null){ stack.push(element.rightChild); } if(element.leftChild != null){ stack.push(element.leftChild); } } } /** * 二、 廣度優先遍歷 */
public List<Node> breadthTraverse(Node root){ List<Node> allNodes = new LinkedList<>(); if(root == null){ return allNodes; } Deque<Node> queue = new ArrayDeque<>(); queue.add(root); while(!queue.isEmpty()){ Node currentNode = queue.poll(); allNodes.add(currentNode); if(currentNode.leftChild != null){ queue.add(currentNode.leftChild); } if(currentNode.rightChild != null){ queue.add(currentNode.rightChild); } } return allNodes; } class Node{ private Object data; private Node leftChild; private Node rightChild; public Node(Object data, Node leftChild, Node rightChild){ this.data = data; this.leftChild = leftChild; this.rightChild = rightChild; } } }