#include"iostream"
#include"stdio.h"
using namespace std;
typedef struct BiTNode{
char data;
struct BiTNode *lchild, *rchild;
}BiTNode, *BiTree;
/*创建一颗二叉树*/
void CreatBiTree(BiTree *T)
{
char c;
cin >> c;
if (c == '#') *T = NULL;
else
{
*T = new BiTNode;//创建根节点,给根节点开辟空间
(*T)->data = c; //将c的值存入T的数据域中
CreatBiTree(&(*T)->lchild);//递归地创建左子树
CreatBiTree(&(*T)->rchild);//递归地创建右子树
}
}
void visit(char c, int level)
{
cout << c << " is at " << level << "th level of BiTree" << endl;
}
void PreOrderTraverse(BiTree T, int level)
{
if (T)
{
visit(T->data, level);
PreOrderTraverse(T->lchild, level + 1);
PreOrderTraverse(T->rchild, level + 1);
}
}
void ZHONGOrderTraverse(BiTree T, int level)
{
if (T)
{
PreOrderTraverse(T->lchild, level + 1);
visit(T->data, level);
PreOrderTraverse(T->rchild, level + 1);
}
}
void HOUOrderTraverse(BiTree T, int level)
{
if (T)
{
PreOrderTraverse(T->lchild, level + 1);
PreOrderTraverse(T->rchild, level + 1);
visit(T->data, level);
}
}
int getleafNode(BiTree T)//利用递归用叶子结点个数
{
if (T == NULL)
return 0;
if (T->lchild == NULL&&T->rchild == NULL)
return 1;
return getleafNode(T->lchild) + getleafNode(T->rchild);
}
int getTreeCount(BiTree T)
{
if (T == NULL)
return 0;
return getTreeCount(T->lchild) + getTreeCount(T->rchild)+1;
}
int getheight(BiTree T)
{
if (T == NULL)
{
return 0;
}
else
{
int hl = getheight(T->lchild);
int hr = getheight(T->rchild);
if (hl > hr)
return ++hl;
else
return ++hr;
}
}
int main()
{
int level = 1;
BiTree T = NULL;//初始化根节点
CreatBiTree(&T);
PreOrderTraverse(T, level);
cout <<"该二叉树叶子结点的个数:"<< getleafNode(T) << endl;
cout << "该二叉树结点个数:" << getTreeCount(T) << endl;
cout << "该二叉树的高度:" << getheight(T) << endl;
}
二叉树
最新推荐文章于 2022-05-01 12:47:37 发布