算法||问题:模拟打牌:小喵钓鱼游戏规则:一副牌均分为两份,每人一份。A 出一张,B 出一张当某人出的牌与桌子上某张牌相同,就将两张相同的牌及中间所夹的牌取走,并依次放到自己牌的末尾

  • 树形结构:结点间具有层次关系,每一层的一个结点能且只能和上一层的一个结点相关,但同时可以和下一层的多个结点相关,称为“一对多”关系,常见类型有:树、堆。

二叉树:由三个基本单元组成:根节点、左子树、右子树。

  1. 查找数据 :查找指定节点,遍历
  • 流程图

算法||问题:模拟打牌:小喵钓鱼游戏规则:一副牌均分为两份,每人一份。A 出一张,B 出一张当某人出的牌与桌子上某张牌相同,就将两张相同的牌及中间所夹的牌取走,并依次放到自己牌的末尾_第1张图片

INORDER-TREE-WALK(x)
if x!=NIL
    INORDER-TREE-WALK(x.left)
    print x.key
INORDER-TREE-WALK(x.right)

// 参数x指的是查找的当前节点。参数k指的是查找的目标关键字
TREE-SEARCH(x,k)
// 当x为nil的时候,那么k必然不存在,所以返回nil即x就好;
// 当x节点存储的关键字刚好是目标关键字的时候,那么返回x
    if x==NIL or k==x.key
        return x
// 当目标关键小于当前节点存储的key的时候,就去x节点的左子树中查找。因为二叉搜索树的特点就是右子树存储的关键字均大于当前节点的关键字,所以在这种情况下可以直接忽略右子树
    if k
  • 复杂度分析:时间复杂度: O(n)
  • 可以改进 :非递归
TREE-SEARCH(x,k)
    y=x.key
    while x!=NIL and k!=y
        if k

你可能感兴趣的:(C++,算法)