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


    题目:

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

    思路:

    首先根据给出的字符串先把二叉树建起来,这里稍稍卡了一下(所以决定写个博客存一下);

    建起来后就好说了,递归交换左右子树;

    然后递归中序遍历就ok了!

    代码:

    #include <bits/stdc++.h>
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include <vector>
    #include <algorithm>
    #include <queue>
    #include <iomanip>
    #define MAX 1000000000
    #define inf 0x3f3f3f3f
    #define FRE() freopen("in.txt","r",stdin)
    
    using namespace std;
    typedef long long ll;
    const int maxn = 10005;
    struct Node
    {
        char date;
        Node* rt;
        Node* lt;
    };
    typedef Node* Tree;
    int len,idx;
    string str;
    
    void build(Tree& root)
    {
        if(str[idx]=='#'||idx==len) return;
        root = new Node;
        root->date = str[idx];
        root->lt = NULL;
        root->rt = NULL;
        idx++;//因为在字符串中是一直向后走的,所以这里用一个全局变量表示字符串你的下标就ok了
        build(root->lt);
        idx++;
        build(root->rt);
        return;
    }
    
    void exchangeNode(Tree& root)//从根节点一次交换左右子树就搞定!
    {
        if(root->lt==NULL && root->rt==NULL)
            return;
        Node* temp;
        temp = root->lt;
        root->lt = root->rt;
        root->rt = temp;
        if(root->lt!=NULL)
            exchangeNode(root->lt);
        if(root->rt!=NULL)
            exchangeNode(root->rt);
    }
    
    void midTravel(Tree root)//中序遍历二叉树
    {
        if(root->lt!=NULL)
            midTravel(root->lt);
        printf("%c",root->date);
        if(root->rt!=NULL)
            midTravel(root->rt);
    }
    
    int main()
    {
       // FRE();
        cin>>str;
        len = str.length();
        idx = 0;
        Tree root = NULL;
        build(root);
        midTravel(root);
        printf("
    ");
        exchangeNode(root);
        midTravel(root);
        return 0;
    }
  • 相关阅读:
    SCRUM第一天
    第八周总结
    第7周总结
    团队项目nabcd
    人月神话1
    课堂练习之四则运算
    第六周总结
    Storm Grouping —— 流分组策略
    抓取网页内容生成Kindle电子书(转)
    浅析PageRank算法(转)
  • 原文地址:https://www.cnblogs.com/sykline/p/10579453.html
Copyright © 2020-2023  润新知