二叉查找樹(BST : BInary Search Tree)this
二叉查找樹的性質:spa
1.每個元素有一個鍵值code
2.左子樹的鍵值都小於根節點的鍵值blog
3.右子樹的鍵值都大於根節點的鍵值遞歸
4.左右子樹都是二叉查找樹class
二叉查找樹查找一個數據的速度很是快,在龐大的數據中,左右來回較少的次數就能找到。下面來作一個二叉查找樹。數據
1.建立一個節點類:di
// 樹節點 class TreeNode { public char val; public TreeNode left; public TreeNode right; public TreeNode(char x) { val = x; } }
2.完整代碼:while
package tree; public class BinaryFindTree { private TreeNode root; public BinaryFindTree(TreeNode root) { this.root = root; } //插入節點 public boolean Insert(TreeNode x) { TreeNode p = root; TreeNode q = null; //查找插入的位置 while(p != null) { q = p; if(x.val == p.val) {return false;} if(x.val < p.val) {p = p.left;} else {p = p.right;} } //找到的位置就是q if(root == null) root = x; else if (x.val < q.val) q.left = x; else q.right = x; return true; } //遞歸查找 public TreeNode Search(TreeNode x) { return Search(root, x); } public TreeNode Search(TreeNode b, TreeNode x) { if(b == null) return null; if(x.val == b.val) return b; if(x.val < b.val) return Search(b.left, x); return Search(b.right, x); } //迭代查找 public TreeNode IterSearch(TreeNode x) { TreeNode t = root; while(t != null) { if(t.val == x.val) return t; if(x.val < t.val) t = t.left; else t = t.right; } return null; } // 樹節點 class TreeNode { public char val; public TreeNode left; public TreeNode right; public TreeNode(char x) { val = x; } } }