7-4 두 갈래 나무의 매 결점의 왼쪽 아이와 오른쪽 아이를 교환한다(20분)

5401 단어
제목:
두 갈래 체인 시계를 두 갈래 나무의 저장 구조로 삼아 두 갈래 나무의 각 결점의 왼쪽 아이와 오른쪽 아이를 교환한다.
생각:
먼저 주어진 문자열에 따라 두 갈래 나무를 먼저 세우고 여기에 살짝 끼었다(그래서 블로그를 써서 저장하기로 했다).
지어지면 그만이고, 차례차례 좌우 나무를 교환한다.
그리고 귀환 중 차례차례 반복하면 오케이!
코드:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#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; }

 
다음으로 전송:https://www.cnblogs.com/sykline/p/10579453.html

좋은 웹페이지 즐겨찾기