首页 > 其他分享 >P1305 新二叉树

P1305 新二叉树

时间:2023-10-01 20:45:59浏览次数:30  
标签:char int dfs P1305 fa 二叉树 root

Problem

题目简述

给你一个二叉树,求前序遍历。
输入的方法为左右孩子表示法。

思路

这道题的话可以DFS。定义一个结构体 \(node\), 存储 \(3\) 个信息: \(fa ,l,r\) 分别表示父亲、左子树、右子树。然后下标就是字母的 \(ACSII\) 码。

然后每次将左子树、右子树的 \(fa\) 更新,然后从 \(root\) 开始 \(DFS\)。

代码

#include <bits/stdc++.h>

using namespace std;

int n;

struct node {
    char fa, l, r;
} a[1010];

// 先序遍历:根左右
void dfs(char s) {
    printf("%c", s);
    if (a[s].l != '*') dfs(a[s].l);
    if (a[s].r != '*') dfs(a[s].r);
}

int main() {
    scanf("%d", &n);
    char c, root;
    for (int i = 1; i <= n; i++) {
        cin >> c;
        if (i == 1) root = c; // 输入的第一个一定为根。
        cin >> a[c].l >> a[c].r;
        a[a[c].l].fa = a[a[c].r].fa = c;
    }
    dfs(root); // 从root开始搜。
    return 0;
}

标签:char,int,dfs,P1305,fa,二叉树,root
From: https://www.cnblogs.com/yhx0322/p/17739242.html

相关文章

  • 【洛谷 P1305】新二叉树 题解(结构体数组+先序遍历+二叉树)
    新二叉树题目描述输入一串二叉树,输出其前序遍历。输入格式第一行为二叉树的节点数。()后面行,每一个字母为节点,后两个字母分别为其左右儿子。特别地,数据保证第一行读入的节点必为根节点。空节点用*表示输出格式二叉树的前序遍历。样例#1样例输入#16abcbdicj*d**i**j**......
  • 226. 翻转二叉树
    给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。示例1:输入:root=[4,2,7,1,3,6,9]输出:[4,7,2,9,6,3,1]示例2:输入:root=[2,1,3]输出:[2,3,1]示例3:输入:root=[]输出:[]第一眼想到了递归/***Definitionforabinarytreenode.*structTreeNode{*......
  • 【UVA 536】Tree Recovery 题解(根据遍历序列还原二叉树)
    小瓦伦丁非常喜欢玩二叉树。她最喜欢的游戏是随机构建查找节点中带有大写字母的二叉树。这是她创作的一个例子:为了给后代记录她的树,她为每棵树写下了两个字符串:预订单遍历(根、左子树、右子树)和有序遍历(左子树、根、右子树。对于上面绘制的树,预序遍历是DBACEGF,有序遍历是ABCDEFG......
  • 代码随想录day21 | ● 530.二叉搜索树的最小绝对差 ● 501.二叉搜索树中的众数 ● 2
    530.二叉搜索树的最小绝对差classSolution{private:intresult=INT_MAX;TreeNode*pre=NULL;voidtraversal(TreeNode*cur){if(cur==NULL)return;traversal(cur->left);//左if(pre!=NULL){//中......
  • 二叉树的四种遍历方式
    前序遍历:从根节点开始,然后按照当前结点,左子结点,右子结点的顺序遍历中序遍历:从最左边的子结点开始,然后按照左子结点,当前结点,右子结点的顺序遍历(左中右)后序遍历:从最左边的子结点开始,然后按照左子结点,右子结点,当前结点的顺序遍历(左右中)层序遍历:从根节点开始一层一层的遍历......
  • 链式二叉树的遍历
    如果使用动态创建二叉树需要使用递归,故使用静态的方式创建二叉树代码如下://链式二叉树///使用静态创建二叉树#include<stdio.h>#include<malloc.h>//定义二叉树的数据结构typedefstructbinaryTree{ charvalue;//存储的值 structbinary......
  • ## day16 - 二叉树part03
    day16-二叉树part03力扣104.二叉树的最大深度思路:最大深度,即为顶点高度。如果想求高度,人类思维的角度,就是从底层开始算,往上一层+1,加到顶点就是高度,也就是最大深度。因此要用后序遍历,这样可以左右根的顺序进行遍历,从而一层一层向上返回结果,返回到根节点的时候就计算出来了最......
  • (转)树、森林与二叉树之间的转换
    原文:https://heptaluan.github.io/2020/04/02/Essay/19/本章我们主要来看一下树、森林和二叉树之间的相互转换以及赫夫曼树的相关概念普通树转换为二叉树我们借助图片来进行了解,首先下图是一颗普通的树,它有三个结点,所以明显不是二叉树如果将其转换成相应的二叉树分为两个步......
  • ## day15 - 二叉树part02
    day15-二叉树part02力扣102.二叉树的层序遍历思路:使用一个队列,将根节点放入队列,并使用size记录每一层的节点数量,然后遍历。为什么和深度优先搜索不一样了呢?为什么不能使用递归了呢?比如先序遍历时,每层的逻辑都是根左右,遍历到当前节点,就对当前节点实施根左右,可以完成递归。......
  • (转)Python描述数据结构之线索二叉树篇
    原文:https://blog.csdn.net/qq_42730750/article/details/108285846前言  本篇章主要介绍线索二叉树,包括线索二叉树的基本概念、构造及遍历,并用Python实现其创建及其遍历等操作。1.基本概念  上篇博客介绍的二叉链表的存储结构体现的只是一种父子关系,它不能直接得到结点在......