【PAT】PAT总结《树、并查集》

这篇博客总结了PAT考试中关于广义树、二叉树和并查集的相关算法,包括层次遍历、供应商问题、二叉树的遍历、AVL树和红黑树的判定以及并查集的模板和应用。重点介绍了如何处理各种树结构的题目,如二叉树的建树、中序遍历和完全二叉树的验证,以及并查集在社交网络和家族关系问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

广义树

这种题一般给出每个结点的子结点,如果字段比较多可以使用结构体,然后使用一个指针向量来存储每个结点的子结点,当然还可以根据需要建立父结点的指针字段。广义树常用BSF层次遍历,可以视为是一种特殊结构的BFS题目(一般的BFS题结点不一定是树状结构)。

常用结构体模板

struct Node{
   
   
    // 其他字段
    vector<Node*> children;// 子结点
}

常用层次遍历模板

    queue<Node*> q;
    q.push(nodes);
    Node* cur;
    while (!q.empty()) {
   
   
        for(int i = 0, l = (int)q.size(); i < l; i++){
   
   
            for(auto lt : cur->children){
   
   
                    q.push(lt);
                }
            q.pop();
        }
    }

这个其实就是搜索那一章使用的一次取出一层的层次遍历方法,如果可能一个子结点存在多个父结点的话,还需要使用marked来防止重复入队。

供应商问题

A1079 Total Sales of Supply Chain
A1090 Highest Price in Supply Chain
A1106 Lowest Price in Supply Chain
这三题都差不多,套上面那个模板就可以了

A1094 The Largest Generation

A1094 The Largest Generation
水题,就是考BFS。

A1130 Infix Expression

A1130 Infix Expression
水题,考DFS遍历。

二叉树

要考虑什么时候需要建树,什么时候不需要建树。使用静态写法还是结构体写法。
如果题目直接给出每个结点的左右子结点,那么使用静态写法比较方便,否则使用结构体写法递归建树。要熟练掌握四种遍历顺序的概念和递归输出的方法。
要注意是否会出现重复结点值,如有的话可能插在等于它的结点的右子结点也可能不插入,视具体题目而定。
注意逆后序不是前序

建树模板

void insert(Node*&x, int value){
   
   
    if(x == NULL){
   
   
        x = new Node;
        x->value = value;
    }else if(value < x->value){
   
   
        insert(x->left, value);
    }else{
   
   
        insert(x->right, value);
    }
}

也可以不使用引用指针,而是使用return来返回根结点,其实差不多。

路径模板

// 递归检查
void 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值