1. 程式人生 > 其它 >求二叉樹左右子樹高度差_6.7 二叉樹的左右子樹交換

求二叉樹左右子樹高度差_6.7 二叉樹的左右子樹交換

技術標籤:求二叉樹左右子樹高度差

e239606585d927cc93a01ef8ed840446.png

返回目錄:

Chilan Yu:《資料結構》目錄連結​zhuanlan.zhihu.com a4fd90bd0d317f53befbcc14d04c746a.png

【問題描述】
二叉樹按照二叉連結串列的方式儲存。編寫程式,計算二叉樹中葉子結點的數目並輸出;編寫程式,將二叉樹的左右子樹進行交換,並輸出交換後的二叉樹的後序遍歷序列。

【輸入形式】
二叉樹的前序遍歷序列,空指標的位置輸入字元#

【輸出形式】
葉子結點的數目
左右子樹交換後,後序遍歷的序列,空子樹的位置輸出字元#

【樣例輸入】
ABE##F##CG###

【樣例輸出】
3 ###GC##F##EBA

#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <cstring>
using namespace std;

typedef struct Node{
    char data;
    struct Node * LChild;
    struct Node * RChild;
}BiTNode, * BiTree;

/*用擴充套件先序遍歷序列建立二叉連結串列*/
void CreateBiTree(BiTree * bt){//這邊的bt是指標的指標
    char ch;
    ch = getchar();
    if(ch=='#') *bt = NULL;
    else{
        *bt = (BiTree)malloc(sizeof(BiTNode));//用(*bt)指標開闢結點空間
        (*bt)->data = ch;
        CreateBiTree( &( (*bt)->LChild ) );
        CreateBiTree( &( (*bt)->RChild ) );
    }
}

/*後序遍歷輸出二叉樹中的結點(左右根)*/
void PostOrder(BiTree root){//後序遍歷輸出二叉樹結點,root為指向二叉樹(或某一子樹)根結點的指標
    if(root!=NULL){//如果root不為空
        PostOrder(root->LChild);//後序遍歷左子樹
        PostOrder(root->RChild);//後序遍歷右子樹
        printf("%c",root->data);//輸出根結點
    }
    else cout << "#";
}

/*分治演算法統計葉子結點數目*/
int leaf(BiTree root){//root為指向二叉樹(或某一子樹)根結點的指標
    int LeafCount;
    if(root==NULL) LeafCount = 0;//如果是空樹,返回0
    else if( (root->LChild==NULL) && (root->RChild==NULL) )//如果只有一個結點(沒有左子樹和右子樹),返回1
        LeafCount = 1;
    else//否則葉子數為左右子樹的葉子結點數之和
        LeafCount = leaf(root->LChild) + leaf(root->RChild);
    return LeafCount;
}

void Mirror(BiTree root){//第一種交換方法
    if(root==NULL) return;
    if((root->LChild==NULL) && (root->RChild==NULL)) return;
    BiTree temp = root->LChild;
    root->LChild = root->RChild;
    root->RChild = temp;
    Mirror(root->LChild);
    Mirror(root->RChild);
}
void Change(BiTree root){//第二種交換方法
    if(root!=NULL){
        Change(root->LChild);
        Change(root->RChild);
        BiTNode *p;
        p=root->LChild;
        root->LChild=root->RChild;
        root->RChild=p;
    }
}

int main()
{
    BiTree t;
    CreateBiTree(&t);
    cout << leaf(t) << endl;
//    Mirror(t);
    Change(t);
    PostOrder(t);
    return 0;
} 

返回目錄:

Chilan Yu:《資料結構》目錄連結​zhuanlan.zhihu.com a4fd90bd0d317f53befbcc14d04c746a.png