二叉樹和二叉查找樹的區別:
二叉樹:每個節點的子節點不允許超過兩個。
二叉查找樹:每個節點的子節點不允許超過兩個,同時相對較小的值保存在左節點中, 較大的值保存在右節點中。
關於中序、前序、后序遍歷的理解:
以從整體角度到分支的角度進行考慮,假設一個小的二叉查找樹有三個節點,父節點、左子節點、右子節點,中序遍歷是左子節點、父節點、右子節點;前序是父節點、左子節點、右子節點;后序是左子節點、右子節點、父節點。
function Node(data, left, right) { this.data = data; this.left = left; this.right = right; this.show = show; } function show() { return this.data; } function BST() { this.root = null; this.insert = insert; } function insert(data) { var n = new Node(data, null, null); if (this.root == null) { this.root = n; } else { var current = this.root; var parent; while (true) { parent = current; if (data < current.data) { current = current.left; if (current == null) { parent.left = n; break; } } else { current = current.right; if (current == null) { parent.right = n; break; } } } } } function inOrder(node) { if (node != null) { inOrder(node.left); document.write(node.show() + " "); inOrder(node.right); } } var nums = new BST(); nums.insert(23); nums.insert(45); nums.insert(16); nums.insert(37); nums.insert(3); nums.insert(99); nums.insert(22); document.write("Inorder traversal: " + "<br />"); inOrder(nums.root); document.write("<br />"); function preOrder(node) { if (node != null) { document.write(node.show() + " "); preOrder(node.left); preOrder(node.right); } } document.write("Preorder traversal: " + "<br />"); preOrder(nums.root); document.write("<br />"); function postOrder(node) { if (node != null) { postOrder(node.left); postOrder(node.right); document.write(node.show() + " "); } } document.write("Postorder traversal: " + "<br />"); postOrder(nums.root); /*上述程序運行結果為: Inorder traversal: 3 16 22 23 37 45 99 Preorder traversal: 23 16 3 22 45 37 99 Postorder traversal: 3 22 16 37 99 45 23 */
