二叉树的前序中序后序遍历、高度、结点总数、叶子结点数、是否为满二叉树

#include<iostream>
#include<stack>
#include<queue>
using namespace std;
typedef struct BiTNode{
 char data;
 struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;

void CreatTree(BiTree &T);//建立二叉树
void PreOrderTraverse(BiTree &T); //前序遍历
void InOrderTraverse(BiTree &T);//中序遍历
void PostOrderTraverse(BiTree &T); //后序遍历
int height(BiTree &T);//二叉树高度
int numberOfNodes(BiTree &T);//二叉树结点总数
void getLeavesConut (BiTree T,int *count);//叶子节点数
int getBiTreeLeavesCount(BiTree T);
int numberOfFulls(BiTree &T);//计算满节点个数

int main()
{
 BiTree tree;
 CreatTree(tree);//建立二叉树
 cout<<"前序遍历为:";
 PreOrderTraverse(tree);//前序遍历
 cout<<endl;
 cout<<"中序遍历为:";
 InOrderTraverse(tree); //中序遍历
 cout<<endl;
 cout<<"后序遍历为:";
 PostOrderTraverse(tree); //后序遍历
 cout<<endl;
 cout<<"二叉树高度为:";
 cout<<height(tree)<<endl;
 cout<<"二叉树的节点总数为:"<<numberOfNodes(tree)<<endl;
 cout<<"叶子结点个数为:"<<getBiTreeLeavesCount(tree)<<endl;
 cout<<endl;
 cout<<"满节点个数为:"<<numberOfFulls(tree)<<",";
 if(numberOfFulls(tree)==numberOfNodes(tree)-getBiTreeLeavesCount(tree))
 cout<<"该二叉树为满二叉树"<<endl;
 else cout<<"该二叉树不是满二叉树"<<endl;
 return 0;
}
void CreatTree(BiTree &T)//建立二叉树
{
 char ch;
 cin>>ch;
 if(ch=='#')T=NULL;
 else
 {
  T=new BiTNode;
  if(!T)cout<<"生成节点错误!"<<endl;
  T->data=ch;
  CreatTree(T->lchild);
  CreatTree(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);
 }
}

猜你喜欢

转载自blog.csdn.net/weixin_42324771/article/details/84966725
今日推荐