> 文档中心 > 数据结构与算法:二叉搜索树

数据结构与算法:二叉搜索树


✨数据结构与算法:二叉搜索树

  • 🍊1. 二叉搜索树的概念
  • 🍊2.二叉搜索树中的查找
  • 🍊3.二叉搜索树的插入
  • 🍊4.删除二叉搜索树中的一个节点(较复杂)
  • 🍊5.判断是不是二叉搜索树(易错)
  • 🍊结束语

📃 个人主页: 不断前进的皮卡丘
🌞博客描述:梦想也许遥不可及,但重要的是追梦的过程,用博客记录自己的成长,记录自己一步一步向上攀登的印记
🔥网站推荐:千里之行,始于足下。每天坚持刷题,巩固所学知识,也为将来找工作,面试做好准备----- 牛客网刷题神器

🍊1. 二叉搜索树的概念

数据结构与算法:二叉搜索树

🎈二叉搜索树又叫做二叉排序树,它具有下面的几个性质:
1️⃣若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
2️⃣若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
3️⃣它的左、右子树也分别为二叉排序树

🍊2.二叉搜索树中的查找

给定一棵二叉搜索树,以及一个值val,如果二叉搜索树中存在值和val相同的节点,则返回这个节点,否则返回null
数据结构与算法:二叉搜索树

public TreeNode searchBST(TreeNode root, int val) { if(root==null) return null; TreeNode curr=root; while(curr!=null){     if(curr.val==val){  return curr;     }else if(curr.val<val){  curr=curr.right;     }else{  curr=curr.left;     } } //循环外面说明没有找到 return null;    }

🍊3.二叉搜索树的插入

NC372 插入二叉搜索树

二叉搜索树的插入需要考虑下面几种情况

1️⃣根节点为空,那么待插入的节点就作为二叉搜索树的根节点
2️⃣根节点非空,则找到待插入的位置

数据结构与算法:二叉搜索树

public class Solution {    /**     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可     *     *      * @param root TreeNode类      * @param val int整型      * @return TreeNode类     */    public TreeNode insertToBST (TreeNode root, int val) { // write code here if(root==null) return new TreeNode(val); TreeNode curr=root; TreeNode parent=null; while(curr!=null){     if(curr.val==val){  break;     }else if(curr.val<val){  parent=curr;  curr=curr.right;     }else{  parent=curr;  curr=curr.left;     } } if(curr==parent.left){     parent.left=new TreeNode(val); }else{     parent.right=new TreeNode(val); }   return root;    }}

🍊4.删除二叉搜索树中的一个节点(较复杂)

NC297 删除一个二叉搜索树中的节点
数据结构与算法:二叉搜索树

public class Solution {    /**     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可     *     *      * @param root TreeNode类      * @param key int整型      * @return TreeNode类     */     public TreeNode deleteNode(TreeNode root, int key) { root = delete(root,key); return root;    }    private TreeNode delete(TreeNode root, int key) { if (root == null) return null; if (root.val > key) {     root.left = delete(root.left,key); } else if (root.val < key) {     root.right = delete(root.right,key); } else {     if (root.left == null) return root.right;     if (root.right == null) return root.left;     TreeNode tmp = root.right;     while (tmp.left != null) {  tmp = tmp.left;     }     root.val = tmp.val;     root.right = delete(root.right,tmp.val); } return root;    }}

🍊5.判断是不是二叉搜索树(易错)

NC184 判断是不是二叉搜索树

判断是不是二叉搜索树,就是看这棵二叉树是否满足二叉搜索树的性质,当二叉搜索树进行中序遍历的时候,它们的节点的值是按照从小到大排序的,我们可以利用这个性质来解答。数据结构与算法:二叉搜索树

public class Solution {    /**     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可     *     *      * @param root TreeNode类      * @return bool布尔型     */      long pre = Long.MIN_VALUE;    public boolean isValidBST(TreeNode root) { if (root == null) {     return true; } // 访问左子树 if (!isValidBST(root.left)) {     return false; } // 访问当前节点:如果当前节点小于等于中序遍历的前一个节点,说明不满足BST,返回 false;否则继续遍历。 if (root.val <= pre) {     return false; } pre = root.val; // 访问右子树 return isValidBST(root.right);    }}

🍊结束语

希望大家可以自己动手练习一下,算法光看是不行的,必须亲自动手敲代码,有时候你会发现自己有思路,但是又写不出来,这就是缺乏练习的原因。大家平时在做题的时候,可以多思考,多总结。
刚开始的时候,我们可能遇到一种新的题型,完全没有思路的时候,其实可以先去看看别人的思路,还有题解,把它理解下来,然后把代码敲出来(不要复制粘贴,我们根据自己的理解敲出代码这样才有效果,如果中途卡住了,也可以再回过头去看看)
另外,为了检测一下我们是否真正的掌握,我们可以去做几道相似的题目巩固一下,顺便检验一下自己的成果。
点此跳转去练习数据结构与算法:二叉搜索树

科普知事网