二叉搜索树的属性


一、二叉搜索树中的搜索

在这里插入图片描述

//  二叉搜索树中的搜索
// 二叉搜索树满足如下:
// 左子树所有节点的元素值均小于根的元素值;
// 右子树所有节点的元素值均大于根的元素值
var searchBST = function(root, val) {
    if(!root) return null;
    if(val === root.val){
        return root;
    }
    return searchBST(val < root.val ? root.left:root.right,val)
};

二、验证二叉搜索树

在这里插入图片描述

// 定一个数组存放中序遍历的顺序然后在数组中进行比较
var isValidBST = function(root) {
     let  checkArr = [];
    // 二叉树的中序遍历,左根右 顺序 
     let Traverse = function(root) {
            if(root == null)
                return
            Traverse(root.left);
            checkArr.push(root.val);
            Traverse(root.right);
        }
        Traverse(root)
       for(let i = 1;i < checkArr.length;i ++){
           if(checkArr[i-1] >= checkArr[i])
                return false;
       }
        return true;
};

三、二叉搜索树的最小绝对差

在这里插入图片描述

代码如下(示例):

//二叉搜索树中的最小绝对值
//通过中序遍历将二叉树转化为数组,在数组中进行比较
var getMinimumDifference = function(root) {
 let res = Infinity
    let preNode = null
    const inorder = (node) => {
        if(!node) return
        inorder(node.left)
        // 更新res
        if(preNode) res = Math.min(res, node.val - preNode.val)
        // 记录前一个节点         
        preNode = node
        inorder(node.right)
    }
    inorder(root)
    return res
};

四、二叉搜索树的众数

在这里插入图片描述

 //二叉树中的众数
// 通过中序遍历将二叉树的值存储在数组中,遍历数组中当前值和上一个值比较是否相同。相同则加1,不相同count就是1表示当前是一个新元素
    //每比较一次就要看是否更新最大值
    //如果count>max就更新最大值,清空结果数组,添加新的数据到结果数组
    //如果count= max就说明当前出新次数和之前出现的次数一样多,直接添加新数据到结果数组

var findMode = function(root) {
    let prenode = null;
    let count = 1;
    let max = 1; 
    let res = [];
    const helper = (root) => {
        if(!root) return;
        helper(root.left);
        if(prenode) {
            if(root.val==prenode.val) count++; 
            else count=1;
        }
        if(count > max){
            max = count;
            res = [];
            res.push(root.val);
        }else if(count == max) res.push(root.val);
        prenode = root;
        helper(root.right);
    }
    helper(root);
    return res;
};

五、把二叉搜索树转换为累加树

在这里插入图片描述
在这里插入图片描述

//  把二叉树转换为累加树
// 先遍历所有的结点,将当前结点与前一个结点相加获得大于当前结点的值
// 先遍历右节点,逆向输出结点的值
var convertBST = function(root) {
    if(!root) return null;
    // 创建一个数组存放各结点
    let res = [];
    let node = root;
    let prenode = null;
    while(node || res.length) {
        while(node) {
            res.push(node)
            node = node.right;
        }
        node = res.pop();
        if(prenode) {
            node.val += prenode.val;
        }
        prenode = node;
        node = node.left;
    }
    return root;
};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 以下是一个简单的 Python 代码示例,用于打印二搜索: ``` class Node: def __init__(self, val=None): self.val = val self.left = None self.right = None def printBST(node): if node is not None: printBST(node.left) print(node.val) printBST(node.right) # 测试样例 root = Node(5) root.left = Node(3) root.right = Node(7) root.left.left = Node(2) root.left.right = Node(4) root.right.left = Node(6) root.right.right = Node(8) printBST(root) ``` 这个代码使用递归的方式打印了二搜索,它首先遍历左子,然后打印当前节点,最后遍历右子。在测试样例中,它将打印以下输出: ``` 2 3 4 5 6 7 8 ``` ### 回答2: 在Python中打印二搜索可以使用中序遍历算法实现。中序遍历的顺序是先打印左子,然后打印根节点,最后打印右子。具体实现如下: 1. 首先,我们需要定义二搜索的节点类,包括一个值属性和左右子节点属性。 ```python class TreeNode: def __init__(self, value): self.value = value self.left = None self.right = None ``` 2. 接下来,我们需要定义一个函数来执行中序遍历打印二搜索。 ```python def in_order_traversal(node): if node: in_order_traversal(node.left) print(node.value) in_order_traversal(node.right) ``` 3. 最后,我们可以创建一个二搜索实例,并调用中序遍历打印函数。 ```python # 创建二搜索 root = TreeNode(5) root.left = TreeNode(3) root.right = TreeNode(7) root.left.left = TreeNode(2) root.left.right = TreeNode(4) root.right.left = TreeNode(6) root.right.right = TreeNode(8) # 打印二搜索 in_order_traversal(root) ``` 运行上述代码,会按照中序遍历的顺序打印出二搜索的节点值:2, 3, 4, 5, 6, 7, 8。 以上就是使用Python打印二搜索的方法。 ### 回答3: 要打印一棵二搜索,可以使用中序遍历的方式进行打印。 中序遍历是指首先遍历左子,然后访问根节点,最后遍历右子。对于二搜索来说,中序遍历得到的结果是有序的。 下面是一个示例代码,用来打印一棵二搜索: ```python class Node: def __init__(self, value): self.value = value self.left = None self.right = None def print_bst(root): if root is None: return print_bst(root.left) print(root.value) print_bst(root.right) # 构造二搜索 root = Node(4) root.left = Node(2) root.right = Node(6) root.left.left = Node(1) root.left.right = Node(3) root.right.left = Node(5) root.right.right = Node(7) # 打印二搜索 print_bst(root) ``` 运行以上代码,会按照升序打印出二搜索中的所有元素: ``` 1 2 3 4 5 6 7 ``` 这就是利用中序遍历打印二搜索的方法。注意,这里假设二搜索中的元素是互不相同的,否则输出结果可能会有重复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值