二叉搜索樹html
對於二叉樹,假設x爲二叉樹中的任意一個結點,x節點包含關鍵字key,節點x的key值記爲key[x]。若是y是x的左子樹中的一個結點,則key[y] <= key[x];若是y是x的右子樹的一個結點,則key[y] >= key[x]。那麼,這棵樹就是二叉查找樹。node
性質spa
由上面的性質很容易看出來,二叉查找樹的中序遍歷是一個增序的序列。所以,二叉搜索樹的最小值是在最左邊,最大值是在最右邊。code
二叉樹的插入htm
TreeNode *bstInsert(int val, TreeNode *root){ if (!root){ return new TreeNode(val); } else if (root->val > val){ root->left = bstInsert(val, root->left); } else if(root->val < val) { root->right = bstInsert(val, root->right); } return root; }
二叉樹的刪除blog
TreeNode *bstDelete(int val, TreeNode *root){ if (!root){ cout << "element not found" << endl; return nullptr; } else if (root->val > val){ root->left = bstDelete(val, root->left); } else if(root->val < val) { root->right = bstDelete(val, root->right); } else{//爲root節點時 //首先找到右子樹的最小值或者左子樹的最大值 if (root->left && root->right){ TreeNode *pa = nullptr; TreeNode *rp = root->right; while (rp->left){ pa = rp;//保存最小值點的父節點 rp = rp->left; //找到右子樹的最小值 } root->val = rp->val;//將該最小值替換到root //父節點不爲空,則最小值節點爲其左子樹 if (pa) pa->left = bstDelete(rp->val, rp);//遞歸刪除該最小值節點 else root->right = bstDelete(rp->val, rp);//不然,是root的右孩子 } else{//左右子樹有一個爲空,則能夠直接刪除根節點 TreeNode *p = root; if (!root->left)root = root->right; else if (!root->right)root = root->left; else root = nullptr; delete p; } } return root; }
從插入刪除操做能夠看出,同一個元素在二叉搜索樹中刪除後再插入位置可能不同;並且二叉搜索樹屢次插入刪除後,可能會出現樹枝偏向一邊,即根節點的一邊的子樹節點不多,另外一邊節點不少,這種不平衡的狀態。所以,它的查找複雜度最壞多是O(n)。遞歸
二叉搜索樹的應用element
95 Unique Binary Search Trees II 列出節點值爲[1,n]的全部可能二叉搜索樹get
解決方法參考下面博文:http://www.cnblogs.com/yeqluofwupheng/p/6755645.html
96 Unique Binary Search Trees 找到節點值爲[1,n]的全部可能二叉搜索樹的數量class
解決方法參考下面博文:http://www.cnblogs.com/yeqluofwupheng/p/6661393.html
98 Validate Binary Search Tree 判斷一個二叉搜索樹是否合法
解決方法參考下面博文:
99 Recover Binary Search Tree
108 Convert Sorted Array to Binary Search Tree
109 Convert Sorted List to Binary Search Tree
173 Binary Search Tree Iterator
230 Kth Smallest Element in a BST235 Lowest Common Ancestor of a Binary Search Tree255 Verify Preorder Sequence in Binary Search Tree270 Closest Binary Search Tree Value272 Closest Binary Search Tree Value II285 Inorder Successor in BST333 Largest BST Subtree449 Serialize and Deserialize BST450 Delete Node in a BST501 Find Mode in Binary Search Tree530 Minimum Absolute Difference in BST538 Convert BST to Greater Tree653 Two Sum IV - Input is a BST