复习下二叉树,创建二叉树,分别以先序,中序,后续三种遍历访问二叉树,输出二叉树的叶子节点及叶子节点的个数,并输出二叉树的高度
[cpp] view plain copy
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- using namespace std;
- typedef struct BiTNode
- {
- char data;
- struct BiTNode *lchild,*rchild;
- }BiTNode,*BiTree;
- int Max(int x,int y)
- {
- return x>y?x:y;
- }
- void Create(BiTree &T) //先序建一颗二叉树
- {
- char ch;
- scanf("%c",&ch);
- if(ch==‘#‘)
- T=NULL;
- else
- {
- T=(BiTNode *)malloc(sizeof(BiTNode));
- T->data=ch;
- Create(T->lchild);
- Create(T->rchild);
- }
- }
- void Preorder(BiTree &root) //先序遍历打印二叉树
- {
- if(root!=NULL)
- {
- printf("%c ",root->data);
- Preorder(root->lchild);
- Preorder(root->rchild);
- }
- }
- void Inorder(BiTree &root) //中序遍历打印二叉树
- {
- if(root!=NULL)
- {
- Inorder(root->lchild);
- printf("%c ",root->data);
- Inorder(root->rchild);
- }
- }
- void Postorder(BiTree &root) //后续遍历打印二叉树
- {
- if(root!=NULL)
- {
- Postorder(root->lchild);
- Postorder(root->rchild);
- printf("%c ",root->data);
- }
- }
- void Preorderleaf(BiTree &root) //先序遍历输出叶子节点
- {
- if(root!=NULL)
- {
- if(root->lchild==NULL&&root->rchild==NULL)
- printf("%c ",root->data);
- Preorderleaf(root->lchild);
- Preorderleaf(root->rchild);
- }
- }
- int LeafCount(BiTree &root) //统计叶子节点的个数
- {
- int leaf;
- if(root==NULL)
- leaf=0;
- else if(root->lchild==NULL&&root->rchild==NULL)
- leaf=1;
- else
- leaf=LeafCount(root->lchild)+LeafCount(root->rchild);
- return leaf;
- }
- int PostTreeDepth(BiTree &root) //统计树的高度
- {
- int hl,hr,max;
- if(root!=NULL)
- {
- hl=PostTreeDepth(root->lchild);
- hr=PostTreeDepth(root->rchild);
- max=Max(hl,hr);
- return max+1;
- }
- else
- return 0;
- }
- void dowork()
- {
- BiTree cam;
- Create(cam);
- Preorder(cam);
- printf("\n");
- Inorder(cam);
- printf("\n");
- Postorder(cam);
- printf("\n");
- printf("叶子节点:");
- Preorderleaf(cam);
- printf("\n");
- printf("叶子节点的个数为:%d\n",LeafCount(cam));
- printf("树的深度为:%d\n",PostTreeDepth(cam));
- }
- int main()
- {
- dowork();
- return 0;
- }
- 顶
- 1
时间: 2024-11-05 14:46:26