可能編譯時會有些語法小錯誤(比如分號,->,等),很容易就自己糾正了哦,思路絕對是完全正確的,所以用的話就自己試著改改吧,直接復制粘貼,就正確,豈不是太沒寫代碼體驗了,自己改改才印象更加深刻的呢(▽)~~~~;
交換左右子樹
//演算法5.5 計算二叉樹的深度,增加左右子數交換等功能
#include<iostream>
using namespace std;
//二叉樹的二叉鏈表存盤表示
typedef struct BiNode
{
char data; //結點資料域
struct BiNode *lchild,*rchild; //左右孩子指標
}BiTNode,*BiTree;
//用演算法5.3建立二叉鏈表
void CreateBiTree(BiTree &T)
{
//按先序次序輸入二叉樹中結點的值(一個字符),創建二叉鏈表表示的二叉樹T
char ch;
cin >> ch;
if(ch=='#') T=NULL; //遞回結束,建空樹
else{
T=new BiTNode;
T->data=https://www.cnblogs.com/ygjzs/p/ch; //生成根結點
CreateBiTree(T->lchild); //遞回創建左子樹
CreateBiTree(T->rchild); //遞回創建右子樹
} //else
} //CreateBiTree
int Depth(BiTree T)
{
int m,n;
if(T == NULL ) return 0; //如果是空樹,深度為0,遞回結束
else
{
m=Depth(T->lchild); //遞回計算左子樹的深度記為m
n=Depth(T->rchild); //遞回計算右子樹的深度記為n
if(m>n) return(m+1); //二叉樹的深度為m 與n的較大者加1
else return (n+1);
}
}
void InOrderTraverse(BiTree T){
//中序遍歷二叉樹T的遞回演算法
if(T){
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
void inChangeLR(BiTree &T)
{
BiTree temp;
if(T){
if(T->lchild==NULL&&T->rchild==NULL){
return;
} else{
temp=T->lchild;
T->lchild = T->rchild;
T->rchild=temp;
}
inChangeLR(T->lchild);
inChangeLR(T->rchild);
}
}
void preChangeLR(BiTree &T)
{
BiTree temp;
if(T){
inChangeLR(T->lchild);
if(T->lchild==NULL&&T->rchild==NULL){
return;
} else{
temp=T->lchild;
T->lchild = T->rchild;
T->rchild=temp;
}
inChangeLR(T->rchild);
}
}
void postChangeLR(BiTree &T)
{
BiTree temp;
if(T){
inChangeLR(T->lchild);
inChangeLR(T->rchild);
if(T->lchild==NULL&&T->rchild==NULL){
return;
} else{
temp=T->lchild;
T->lchild = T->rchild;
T->rchild=temp;
}
}
}
int main()
{
BiTree tree;
cout<<"請輸入建立二叉鏈表的序列:\n";
CreateBiTree(tree);
InOrderTraverse(tree);
cout<<"數的深度為:"<<Depth(tree)<<endl;
cout<<"中序遍歷的結果為:\n";
InOrderTraverse(tree);
cout<<"\n";
//以下三種執行其中一種
cout<<"交換后中序遍歷的結果為:\n";
inChangeLR(tree);
InOrderTraverse(tree);
cout<<"\n";
cout<<"交換后前序序遍歷的結果為:\n";
preChangeLR(tree);
InOrderTraverse(tree);
cout<<"\n";
cout<<"交換后后序遍歷的結果為:\n";
postChangeLR(tree);
InOrderTraverse(tree);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/124289.html
標籤:其他
上一篇:根據赫夫曼樹求赫夫曼編碼
下一篇:求葉子節點數目,求寬度,按層遍歷
