首页 > 其他分享 >L2-011 玩转二叉树 (25 分)

L2-011 玩转二叉树 (25 分)

时间:2023-02-14 13:36:10浏览次数:40  
标签:node 遍历 struct int 011 L2 二叉树 root

L2-011 玩转二叉树 (25 分)

给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。

输入格式:

输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。

输出格式:

在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。

输入样例:

7
1 2 3 4 5 6 7
4 1 3 2 6 5 7

输出样例:

4 6 1 7 5 3 2

&:一开始自己还重建了两次树,一次是按题意,然后跑了一遍后序,然后把两个序列翻转,然后又建了一次树,最后跑了一遍层次遍历。

&:于是乎,发现题目要的就是层次遍历的时候先遍历右孩子就好了。

 

#include <bits/stdc++.h>
using namespace std;
struct node
{
    int data;
    struct node *lc, *rc;
};
int a[100],b[100];
int n;
struct node *creat(int len, int a[], int b[])
{
    if(len == 0) return NULL;
    int i;
    struct node *root;
    root = new node;
    root -> data = a[0];
    for(i = 0; i < len; i ++)
    {
        if(a[0] == b[i])
        {
            break;
        }
    }
    root -> lc = creat(i, a + 1, b);
    root -> rc = creat(len - i - 1,a + i + 1, b + i + 1);
    return root;
};
void level(struct node *root)
{
    queue<node*>q;
    q.push(root);
    bool f = true;
    while(!q.empty())
    {
        struct node *x = q.front();
        if(f)
        {
            printf("%d", x -> data);
            f = false;
        }
        else printf(" %d",x -> data);
        q.pop();
        if(x -> rc) q.push(x -> rc);
        if(x -> lc) q.push(x -> lc);
    }
    printf("\n");
    return ;
}
int main()
{
    while(~scanf("%d",&n))
    {
        for(int i = 0; i < n; i ++) scanf("%d", &b[i]);
        for(int i = 0; i < n; i ++) scanf("%d", &a[i]);
        struct node *root;
        root = creat(n,a,b);
        level(root);
    }

    return 0;
}

 

标签:node,遍历,struct,int,011,L2,二叉树,root
From: https://blog.51cto.com/u_15965659/6056711

相关文章

  • PTA 练习 L1-011 A-B (20 分)
    L1-011 A-B (20分)本题要求你计算A−B。不过麻烦的是,A和B都是字符串——即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A−B。输入格式:输入......
  • L2-3 图着色问题 (25 分)
    L2-3 图着色问题 (25 分)图着色问题是一个著名的NP完全问题。给定无向图G=(V,E),问可否用K种颜色为V中的每一个顶点分配一种颜色,使得不会有两个相邻顶点具有同一种颜色......
  • L2-020 功夫传人 (25 分) 【 DFS 】
    L2-020 功夫传人 (25 分)一门武功能否传承久远并被发扬光大,是要看缘分的。一般来说,师傅传授给徒弟的武功总要打个折扣,于是越往后传,弟子们的功夫就越弱……直到某一支......
  • 剑指 Offer 32 - III. 从上到下打印二叉树 III(java解题)
    目录1.题目2.解题思路3.数据类型功能函数总结4.java代码从上到下打印二叉树系列题目1.剑指Offer32-I.从上到下打印二叉树(java解题)2.剑指Offer32-II.从上......
  • 判断二叉树是否为平衡二叉树
    问题:判断二叉树是否为平衡二叉树面试题55-II.平衡二叉树(从底至顶、从顶至底,清晰图解)-平衡二叉树-力扣(LeetCode)方法一:后序遍历+剪枝,自下而上后续遍历节点,递归向上......
  • leetcode144-二叉树的前序遍历
    leetcode144-二叉树的前序遍历​​1、问题描述​​​​2、递归解法​​1、问题描述  给你二叉树的根节点​​root​​,返回它节点值的前序遍历。  示例1:输入:root=[......
  • CQF M1L2
                                       ......
  • SQL276 牛客的课程订单分析(六)
    题目描述有一个订单信息表(order_info),有一个客户端表(client),请你写出一个sql语句查询在2025-10-15以后,同一个用户下单2个以及2个以上状态为购买成功的C++课程或Java课......
  • 二叉树
    一、二叉树的定义二叉树是n(n≥0)个结点组成的有限集合。当n=0时,称为空二叉树;当n>0时,该集合由一个根节点及两颗互不相交的,被分别成为左子树和右子树的二叉树组成。二......
  • 输出二叉树第h层上的所有结点(1<=h<=k)
    输出二叉树第h层上的所有结点(1<=h<=k)问题引入:已知一颗二叉链表方式存储的深度为k的二叉树,根结点是第1层。编写算法,输出第h层所有结点,1<=h<=k。分析二叉树的算......