已知外部提供創建樹所需要的數據。
方法1:按照從上到下從左到右依次把數據放在對應結點來創建樹。 即數組中index處的數據在樹中仍然是放在index處,而它的左右子結點分別是 2*index+1 , 2*index+2
-- BinaryTree.javapublic class BinaryTree { Node root; int size; // 結點總個數 Object[] data; // 內部類 PRivate class Node{ private Node left; private Node right; private Object data; public Node(Object data){ this.left = null; this.right = null; this.data = data; } } public BinaryTree(Object[] data){ this.data = data; size = data.length; root = createTree(0); } // 創建下標為index處的結點及其子樹,遞歸 public Node createTree(int index){ if (index >= size) return null; Node node = new Node(data[index]); node.left = createTree(2*index+1); node.right = createTree(2*index+2); return node; } // 先序遍歷 public void preShow(Node node) { if(node!=null){ System.out.print(node.data + " "); preShow(node.left); preShow(node.right); } } // 中序遍歷 public void middleShow(Node node) { if (node != null) { middleShow(node.left); System.out.print(node.data + " "); middleShow(node.right); } } // 后序遍歷 public void backShow(Node node) { if (node != null) { middleShow(node.left); middleShow(node.right); System.out.print(node.data + " "); } } public static void main(String[] args) { Object[] my = new Object[]{'1', '2', '3', '4', '0', '5', '6', '7', '8', '0', '0', '9', 'A'}; BinaryTree tree = new BinaryTree(my); tree.preShow(tree.root); System.out.println(); tree.middleShow(tree.root); }}法2:采用先序遍歷創建二叉樹
-- BinaryTree2.javapublic class BinaryTree2 { Node root; int size; // 結點總個數 Object[] data; int index; //表示取到數組中下標為index的元素了 // 內部類 private class Node{ private Node left; private Node right; private Object data; public Node(Object data){ this.left = null; this.right = null; this.data = data; } } public BinaryTree2(Object[] data){ size = data.length; this.data = data; index = 0; root = createTree(); } // 按照先序遍歷創造樹 public Node createTree(){ if(index>=size) return null; Object o = data[index++]; Node node = new Node(o); node.left = createTree(); node.right = createTree(); return node; } // 先序遍歷 public void preShow(Node node) { if(node!=null){ System.out.print(node.data + " "); preShow(node.left); preShow(node.right); } } // 中序遍歷 public void middleShow(Node node) { if (node != null) { middleShow(node.left); System.out.print(node.data + " "); middleShow(node.right); } } // 后序遍歷 public void backShow(Node node) { if (node != null) { middleShow(node.left); middleShow(node.right); System.out.print(node.data + " "); } } public static void main(String[] args) { Object[] my = new Object[]{'1', '2', '3', '4', '0', '5', '6', '7', '8', '0', '0', '9', 'A'}; BinaryTree2 tree = new BinaryTree2(my); tree.preShow(tree.root); System.out.println(); tree.middleShow(tree.root); }}新聞熱點
疑難解答