首页 > 其他 > 详细

A1102 Invert a Binary Tree (25分)

时间:2020-02-16 18:15:36      阅读:66      评论:0      收藏:0      [点我收藏+]

一、技术总结

  1. 这一题题目的理解上给出了每个结点的左右子树的情况,然后就是把这个二叉树反转后进行层次序列和中序遍历进行输出。
  2. 如何对于该二叉树进行反序,就是在后序遍历后,进行左右子树的交换,使用swap函数。
  3. 还有就是对于换行符的接收,可以单独用一个getchar(),也可以进行使用%*c,接收,具体参考代码。

二、参考代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 110;
struct node{
    int lchild, rchild;
}Node[maxn];
bool notRoot[maxn] = {false};//记录是否为根结点,初始均为根结点
int n, num = 0;//n为结点个数,num为当前已输出的结点个数
//print函数输出结点的id编号
void print(int id){
    printf("%d", id);
    num++;
    if(num < n) printf(" ");//最后一个不输出空格 
    else printf("\n");
} 
void inOrder(int root){
    if(root == -1){
        return;
    }
    inOrder(Node[root].lchild);
    print(root);
    inOrder(Node[root].rchild);
} 
void BFS(int root){
    queue<int> q;
    q.push(root);
    while(!q.empty()){
        int now = q.front();
        q.pop();
        print(now);
        if(Node[now].lchild != -1) q.push(Node[now].lchild);
        if(Node[now].rchild != -1) q.push(Node[now].rchild);
    }
}
//后序遍历用于反转二叉树
void postOrder(int root){
    if(root == -1){
        return;
    }
    postOrder(Node[root].lchild);
    postOrder(Node[root].rchild);
    swap(Node[root].lchild, Node[root].rchild);
} 
//将输入的字符转换为-1或者结点的编号
int strToNum(char c){
    if(c == '-') return -1;//表示没有孩子结点,标记为-1 
    else{
        notRoot[c - '0'] = true;//标记c不是根结点 
        return c - '0';//返回根结点编号 
    }
} 
//寻找根结点编号
int findRoot(){
    for(int i = 0; i < n; i++){
        if(notRoot[i] == false){
            return i;
        }
    }
} 
int main(){
    char lchild, rchild;
    scanf("%d", &n);
    for(int i = 0; i < n; i++){
        scanf("%*c%c %c", &lchild, &rchild);
        Node[i].lchild = strToNum(lchild);
        Node[i].rchild = strToNum(rchild);
    }
    int root = findRoot();
    postOrder(root);
    BFS(root);
    num = 0;
    inOrder(root);
    return 0;
}

A1102 Invert a Binary Tree (25分)

原文:https://www.cnblogs.com/tsruixi/p/12317502.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!