题目:编写程序,构造二叉树的链式存储结构,并完成递归先序(中序、后序)遍历操作,计算二叉树的高度、叶子数
代码:#include using namespace std;typedef struct BiNode{ char data; struct BiNode *lchild,*rchild;}*BiTree;void CreateBiTree(BiTree &T){ char ch; cin>>ch; if (ch=='#') T=NULL; else { T=new BiNode; T->data=ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); }}void PreOrderTraverse(BiTree T){ if(T) { cout<data; PreOrderTraverse(T->lchild) ; PreOrderTraverse(T->rchild) ; }}void InOrderTraverse(BiTree T){ if(T) { InOrderTraverse(T->lchild) ; cout<data; InOrderTraverse(T->rchild) ; }}void PostOrderTraverse(BiTree T){ if(T) { PreOrderTraverse(T->lchild) ; PreOrderTraverse(T->rchild) ; cout<data; }}int NodeConut(BiTree T){ if(T==NULL) return 0; else return NodeConut(T->lchild) +NodeConut(T->rchild)+1;}int LeafConut(BiTree T){ if(T==NULL) return 0; else if (T->lchild==NULL && T->rchild==NULL) return 1; else return LeafCount(T->lchild)+LeafCount(T->rchild);}int TreeDepth(BiTree T){ int d1,d2; if (T==NULL) return 0; else { d1=TreeDepth(T=>lchild); d2=TreeDepth(T=>rchild); if(d1>=d2) return d1+1; else return d2+1; }}int main(){ BiTree T; cout<<"请输入建立二叉链表的前序序列:\n"; CreateBiTree(T); cout<<endl; cout<<"先序遍历的结果为:\n"; PreOrderTraverse(T); cout<<endl<<endl; cout<<"中序遍历的结果为:\n"; InOrderTraverse(T); cout<<endl<<endl; cout<<"后序遍历的结果为:\n"; ProOrderTraverse(T); cout<<endl<<endl; cput<<"二叉树结点总数为:"<<NodeCount(T)<<endl<<endl; cput<<"二叉树叶子结点总数为:"<<LeafCount(T)<<endl<<endl; cput<<"二叉树的深度为:"<<TreeDepth(T)<<endl;}
请问该代码要怎样修改
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
超级小狗 2023-11-06 21:49关注#include <iostream> using namespace std; typedef struct BiNode { char data; struct BiNode* lchild; struct BiNode* rchild; } *BiTree; // 建立二叉树 void CreateBiTree(BiTree& T) { char ch; cin >> ch; if (ch == '#') T = NULL; else { T = new BiNode; T->data = ch; CreateBiTree(T->lchild); CreateBiTree(T->rchild); } } // 先序遍历 void PreOrderTraverse(BiTree T) { if (T) { cout << T->data << " "; PreOrderTraverse(T->lchild); PreOrderTraverse(T->rchild); } } // 中序遍历 void InOrderTraverse(BiTree T) { if (T) { InOrderTraverse(T->lchild); cout << T->data << " "; InOrderTraverse(T->rchild); } } // 后序遍历 void PostOrderTraverse(BiTree T) { if (T) { PostOrderTraverse(T->lchild); PostOrderTraverse(T->rchild); cout << T->data << " "; } } // 计算节点总数 int NodeCount(BiTree T) { if (T == NULL) return 0; else return NodeCount(T->lchild) + NodeCount(T->rchild) + 1; } // 计算叶子节点总数 int LeafCount(BiTree T) { if (T == NULL) return 0; else if (T->lchild == NULL && T->rchild == NULL) return 1; else return LeafCount(T->lchild) + LeafCount(T->rchild); } // 计算二叉树的深度 int TreeDepth(BiTree T) { int d1, d2; if (T == NULL) return 0; else { d1 = TreeDepth(T->lchild); d2 = TreeDepth(T->rchild); if (d1 >= d2) return d1 + 1; else return d2 + 1; } } int main() { BiTree T; cout << "请输入建立二叉链表的前序序列:\n"; CreateBiTree(T); cout << endl; cout << "先序遍历的结果为:\n"; PreOrderTraverse(T); cout << endl << endl; cout << "中序遍历的结果为:\n"; InOrderTraverse(T); cout << endl << endl; cout << "后序遍历的结果为:\n"; PostOrderTraverse(T); cout << endl << endl; cout << "二叉树节点总数为: " << NodeCount(T) << endl << endl; cout << "二叉树叶子节点总数为: " << LeafCount(T) << endl << endl; cout << "二叉树的深度为: " << TreeDepth(T) << endl; return 0; }本回答被题主选为最佳回答 , 对您是否有帮助呢?评论 打赏 举报 编辑记录解决 1无用