7-1 交换二叉树中每个结点的左孩子和右孩子 (30分)

以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。

输入格式:
输入二叉树的先序序列。

提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。

输出格式:
输出有两行:

第一行是原二叉树的中序遍历序列;

第二行是交换后的二叉树的中序遍历序列。

输入样例:

ABC##DE#G##F###

输出样例:

CBEGDFA
AFDGEBC

emmm,考试的时候出了点问题,想成了是交换既有做孩子又有右孩子结点的左右孩子,所以。。现在又做了一下。要好好复习了,理论和编程都忘了好多。。
#include <iostream>
using namespace std;

typedef struct Node {
    
    
    char data;
    struct Node *left, *right;
} Node, *Tree;

Tree create() {
    
    
    char ch;
    Tree tree = NULL;
    if (scanf("%c", &ch)) {
    
    //当有输入时
        if (ch != '#') {
    
    
            tree = (Tree)malloc(sizeof(Node));
            tree->data = ch;
            tree->left = create();
            tree->right = create();
        } else {
    
    
            tree = NULL;
        }
    }
    return tree;
}

void order(Tree tree) {
    
    
    if (!tree)
        return;
    order(tree->left);
    printf("%c", tree->data);
    order(tree->right);
}

void swap(Tree tree) {
    
    
    if (!tree)
        return;
    if (!tree->left && !tree->right)
        return;
    Tree tmp = tree->left;
    tree->left = tree->right;
    tree->right = tmp;
    swap(tree->left);
    swap(tree->right);
}

int main() {
    
    
    Tree tree = create();
    order(tree);
    cout << endl;
    swap(tree);
    order(tree);
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_45845039/article/details/111313469
今日推荐