You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于树结构的1-100猜数字游戏系统搜索算法构建问询

基于树结构的1-100数字猜测算法实现方案

嘿,这个问题刚好戳中了二分查找和树结构的结合点!其实基于树结构的猜数算法,本质就是把二分查找逻辑具象成一棵平衡二叉搜索树(BST),效率比暴力搜索高几个量级——暴力最多要100次,这个算法最多7次就能搞定(因为2^7=128>100)。下面给你拆解具体实现思路:

核心逻辑:用平衡BST匹配猜数规则

平衡二叉搜索树的特性完美适配猜数场景:

  • 根节点是当前搜索区间的中间值
  • 左子树所有节点的值都小于根节点,对应“猜大了,要找更小的数”的反馈
  • 右子树所有节点的值都大于根节点,对应“猜小了,要找更大的数”的反馈

我们要做的就是把1-100的数字构建成这样一棵平衡BST,然后从根节点开始猜,根据反馈递归遍历左/右子树,直到命中目标。

步骤1:构建1-100的平衡BST

递归构建是最直观的方式,每一步取当前区间的中点作为子树的根:

  • 整个范围1-100的根节点是 (1+100)//2 = 50
  • 左子树覆盖1-49,根节点是 (1+49)//2 =25;右子树覆盖51-100,根节点是 (51+100)//2=75
  • 重复这个过程,直到每个叶子节点都是单个数字(比如1、100这种边界值)

最终这棵树的高度是7,所有可能的猜测路径都不会超过7步。

步骤2:基于树的猜测流程

有了树之后,猜数的流程就非常清晰了:

  1. 从根节点(50)开始第一次猜测
  2. 根据反馈调整遍历方向:
    • 如果反馈是**“猜小些”:切换到当前节点的右子树**,猜右子树的根节点(比如第一次猜50小了,就猜75)
    • 如果反馈是**“猜大些”:切换到当前节点的左子树**,猜左子树的根节点(比如第一次猜50大了,就猜25)
    • 如果反馈是**“正确”**:结束猜测
  3. 重复步骤2,直到找到目标数字

伪代码实现(Python风格)

下面是一个可运行的伪代码示例,帮你理解具体代码层面的实现:

class TreeNode:
    def __init__(self, value, left=None, right=None):
        self.value = value
        self.left = left  # 存储比当前值小的子树节点
        self.right = right  # 存储比当前值大的子树节点

# 递归构建1-100的平衡二叉搜索树
def build_bst(start, end):
    if start > end:
        return None
    # 取当前区间的中点作为根节点
    mid = (start + end) // 2
    root = TreeNode(mid)
    # 构建左子树(更小的数字范围)
    root.left = build_bst(start, mid - 1)
    # 构建右子树(更大的数字范围)
    root.right = build_bst(mid + 1, end)
    return root

# 基于树的猜数函数
def guess_via_bst(root):
    current_node = root
    while current_node:
        current_guess = current_node.value
        print(f"我猜这个数字是:{current_guess}")
        # 模拟用户输入反馈,实际场景中可以替换成你的交互逻辑
        feedback = input("请反馈:猜大些/猜小些/正确 → ")
        
        if feedback == "正确":
            print("太棒了,猜对啦!")
            return
        elif feedback == "猜小些":
            # 猜小了,去右子树找更大的数
            current_node = current_node.right
        elif feedback == "猜大些":
            # 猜大了,去左子树找更小的数
            current_node = current_node.left
        else:
            print("请输入有效的反馈哦~")

# 初始化树并启动猜数流程
if __name__ == "__main__":
    bst_root = build_bst(1, 100)
    guess_via_bst(bst_root)

额外补充:树结构 vs 纯区间变量

其实你也可以不用真的构建树,用两个变量start和end维护当前搜索区间,每次算mid=(start+end)//2猜测——本质和树结构的逻辑是完全一致的。树只是把这个过程中所有可能的“猜测节点”具象化了,方便理解搜索路径的全貌。

内容的提问来源于stack exchange,提问作者ARW

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:51:36