#include <iostream> #include <cstdio> #include<stdlib.h> using namespace std; typedef char Datatype; int cnt; struct TNode { Datatype data; TNode* rchild; TNode* lchild; }; void CreatTree(TNode* &root) //递归法先序创建树 { char ndata; cin>>ndata; if(ndata=='#') root=NULL; else { root=new TNode;root->data=ndata; CreatTree(root->lchild); CreatTree(root->rchild); } } void preOrderTraver(TNode*& root) //递归法先序遍历 { if(root!=NULL) { cout<<root->data<<" "; preOrderTraver(root->lchild); preOrderTraver(root->rchild); } } void InOrderTraver(TNode*& root) //递归法中序遍历 { if(root!=NULL) { InOrderTraver(root->lchild); cout<<root->data<<" "; InOrderTraver(root->rchild); } } void posOrderTraver(TNode*& root)//递归法后序遍历 { if(root!=NULL) { posOrderTraver(root->lchild); posOrderTraver(root->rchild); cout<<root->data<<" "; } } int BTHeight(TNode *t)//计算二叉树的深度 { int ans = 0; if(t == NULL) return 0; else if(t != NULL) ans += max(ans,max(BTHeight(t->lchild),BTHeight(t->rchild))+1); return ans; } int BTLeafNode(TNode *t)//计算二叉树的叶子节点数 { if(t != NULL) { if(t->lchild == NULL && t->rchild == NULL) { printf("%c",t->data); cnt++; } else { BTLeafNode(t->lchild); BTLeafNode(t->rchild); } } return cnt; } int main() { TNode *root=NULL; cout<<"请输入该二叉树的先序遍历结果:\n"; CreatTree(root); cout<<"先序遍历结果"<<endl; preOrderTraver(root);cout<<endl; cout<<"中序遍历结果:"<<endl; InOrderTraver(root);cout<<endl; cout<<"后序遍历结果:"<<endl; posOrderTraver(root);cout<<endl; printf("\n输出二叉树的深度:"); int sum = BTHeight(root); cout << sum << endl; printf("输出二叉树的叶子结点:"); int ans = BTLeafNode(root); printf("\n输出二叉树的叶子结点的个数:"); cout << ans << endl; system(“pause”); return 0; }每一段有什么作用
时间: 2024-04-25 08:27:33 浏览: 126
这段代码是一个二叉树的创建和遍历程序,具体分为以下几部分:
1. 定义了二叉树的节点结构体 TNode,其中包括节点的数据和左右子树指针。
2. 定义了一个函数 CreatTree,用于递归创建二叉树。
3. 定义了三个遍历函数:preOrderTraver、InOrderTraver、posOrderTraver,分别实现二叉树的先序、中序和后序遍历。
4. 定义了一个函数 BTHeight,用于计算二叉树的深度。
5. 定义了一个函数 BTLeafNode,用于计算二叉树的叶子节点数。
6. 在主函数中,先调用 CreatTree 函数创建二叉树,然后分别调用三个遍历函数输出遍历结果。接着调用 BTHeight 和 BTLeafNode 函数计算二叉树的深度和叶子节点数,并输出结果。
注意,本段代码中存在一些错误,如 system("pause") 语句应该使用双引号,而不是中文引号。此外,BTHeight 函数中的 ans 变量没有被正确初始化,可能会导致计算结果错误。
相关问题
#include <iostream.h> #include <stdlib.h> #include <stdio.h>
抱歉,这段代码看起来像是 C++ 的旧式写法,不太符合现代 C++ 的标准。建议使用 `iostream` 和 `cstdio` 头文件代替 `iostream.h` 和 `stdio.h`,并使用 `cstdlib` 代替 `stdlib.h`。另外,应该使用命名空间(namespace)来避免名称冲突。下面是一个现代化的例子:
```cpp
#include <iostream>
#include <cstdio>
#include <cstdlib>
using namespace std;
int main() {
cout << "Hello, world!" << endl;
printf("Goodbye, world!\n");
return EXIT_SUCCESS;
}
```
阅读全文