专栏文章

题解:P1305 新二叉树

P1305题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio4zq0m
此快照首次捕获于
2025/12/02 13:27
3 个月前
此快照最后确认于
2025/12/02 13:27
3 个月前
查看原文
我也不知道这二叉树哪里了。
这是一道二叉树先序遍历模板。

dfs 顺序

对于每一层 dfs,要求包含一个参数 xx 表示这一层 dfs 的父节点。接下来开始 dfs 遍历:
  1. 输出根节点 xx
  2. 如果 xx 没有子节点,返回上一层。
  3. 将根节点 xx 的左节点 LxL_x 作为新的根节点,启动另一个 dfs,参数为 LxL_x,回到第 11 步;
  4. 将根节点 xx 的右节点(如果有)RxR_x 作为新的根节点,启动另一个 dfs,参数为 RxR_x,回到第 11 步。
当所有节点遍历完毕,本题完。

代码

CPP
#include<bits/stdc++.h>
using namespace std;
const int N = 'z'+5;

int n, cnt;
char Lson[N], Rson[N];

void dfs(char u){
    // 空节点返回 
    if(u == '*') return;
    // 输出根节点 
    cout << u;
    // 遍历左子节点 
    dfs(Lson[u]);
    // 遍历右子节点 
    dfs(Rson[u]);
}

int main(){
    cin >> n; char father;
    for(int i=1; i<=n; i++){
        char f, L, R; cin >> f >> L >> R;
        // 题目保证第一行的节点是根节点  
        if(i == 1) father = f;
        // 保存左右子节点
        Lson[f] = L, Rson[f] = R;
    }
    
    // 从最大的根开始遍历 
    dfs(father);
}

评论

0 条评论,欢迎与作者交流。

正在加载评论...