#include <iostream> #include <fstream> using namespace std; ifstream cin1("e://graph.txt"); /*测试数据如下*/ /* ABC$$DE$G$$F$$$ */ struct Bitree { char element; Bitree *lchild,*rchild; }; void CreateBiTree(Bitree *&tree);//创建二叉树 void PreOrderTraverse(Bitree *tree);//先序遍历 void InOrderTraverse(Bitree *tree);//中序遍历 void PostOrderTraverse(Bitree *tree);//后序遍历 int NumOfNode(Bitree *tree);//结点个数 int leaf(Bitree *tree,int &NumOfLeaf);//叶子数 int high(Bitree *tree);//树的高度 int main() { Bitree *tree; CreateBiTree(tree); cout<<"先序遍历"<<endl; PreOrderTraverse(tree); cout<<endl; cout<<"中序遍历"<<endl; InOrderTraverse(tree); cout<<endl; cout<<"后序遍历"<<endl; PostOrderTraverse(tree); cout<<endl; int NumOfLeaf=0; cout<<"叶子数:"<<endl; cout<<leaf(tree,NumOfLeaf)<<endl; cout<<"节点数:"<<endl<<NumOfNode(tree)<<endl; cout<<"高度"<<endl<<high(tree)<<endl; return 0; } void CreateBiTree(Bitree *&tree) { char ch; cin1>>ch; if (ch=='$') { tree=NULL; } else { tree = new Bitree; tree->element=ch; CreateBiTree(tree->lchild); CreateBiTree(tree->rchild); } } void PreOrderTraverse(Bitree *tree) { if(tree) { cout<<tree->element<<" "; PreOrderTraverse(tree->lchild); PreOrderTraverse(tree->rchild); } } void InOrderTraverse(Bitree *tree) { if (tree) { InOrderTraverse(tree->lchild); cout<<tree->element<<" "; InOrderTraverse(tree->rchild); } } void PostOrderTraverse(Bitree *tree) { if (tree) { PostOrderTraverse(tree->lchild); PostOrderTraverse(tree->rchild); cout<<tree->element<<" "; } } int NumOfNode(Bitree *tree) { if (tree == NULL) { return 0; } else return 1+NumOfNode(tree->lchild)+NumOfNode(tree->rchild); } int leaf(Bitree *tree,int &NumOfLeaf) { if (tree!=NULL) { if (tree->lchild==NULL&&tree->rchild==NULL) NumOfLeaf++; leaf(tree->lchild,NumOfLeaf); leaf(tree->rchild,NumOfLeaf); } return NumOfLeaf; } int high(Bitree *tree) { if (tree==NULL) { return 0; } else { int h1=high(tree->lchild)+1; int h2=high(tree->rchild)+1; return h1>h2?h1:h2; } }