二叉搜索树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