1102 Invert a Binary Tree

题目

解法

  1. 使用静态链表构建二叉树
  2. 用IsVisited数组保存所有的非根节点,遍历该数组就可得到根节点
  3. 写层序遍历函数,只是先检查右子树,再检查左子树
  4. 写中序遍历函数,也是先递归右子树,再递归左子树
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int N;
struct Node{
    int left,right;
}A[11];
bool IsVisited[11];
vector<int> level;
vector<int> inorder;
void Print_Level(int root){
    if(root == -1)
        return;
    queue<int> q;
    q.emplace(root);
    while(!q.empty()){
        int t = q.front();
        q.pop();
        level.emplace_back(t);
        if(A[t].right != -1)
            q.emplace(A[t].right);
        if(A[t].left != -1)
            q.emplace(A[t].left);
    }
}
void Print_Inorder(int root){
    if(root == -1)
        return;
    Print_Inorder(A[root].right);
    inorder.emplace_back(root);
    Print_Inorder(A[root].left);
}
int main()
{
    ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
    for(int i = 0;i < 11;i++){
        A[i].left = A[i].right = 0;
        IsVisited[i] = false;
    }
    scanf("%d\n",&N);
    char l,r;
    for(int i = 0;i < N;i++){
        scanf("%c %c\n",&l,&r);
        if(l >= '0' && l <= '9'){
            A[i].left = l - '0';
            IsVisited[l - '0'] = true;
        }
        else
            A[i].left = -1;
        if(r >= '0' && r <= '9'){
            A[i].right = r - '0';
            IsVisited[r - '0'] = true;
        }
        else
            A[i].right = -1;
    
    }
    int root = -1;
    for(int i = 0;i < N;i++)
        if(IsVisited[i] == false)
            root = i;
    Print_Level(root);
    Print_Inorder(root);
    for(int i = 0;i < level.size();i++)
        if(i == 0)  cout << level[0];
        else    cout << " " << level[i];
    cout << endl;
    for(int i = 0;i < inorder.size();i++)
        if(i == 0)  cout << inorder[0];
        else    cout << " " << inorder[i];
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值