二叉树的建立及输出,问题描述:
(1)前序输入结点,用”#“表示空指针
(2)前序遍历二叉树
(3)中序遍历二叉树
(4)后序遍历二叉树
(5)求二叉树的长度
(6)求二叉树的叶子结点
#include<stdlib.h>
#include<stdio.h>
#include<iostream>
using namespace std;
int len=0;
typedef struct BiTreenode
{
char data;
struct BiTreenode *lchild, *rchild;
}BiTreenode,*BiTreePoint;
void CreateTree(BiTreePoint &T)//前序创建二叉树
{
char ch;
printf("前序输入结点:");
cin>>ch;//ch判断从键盘输入的字符,并将非#的字符存放在T->data中
if (ch == '#')//从键盘输入的是#则T为空树
T = NULL;
if(T)//T非空树的话,将ch的值存放在data域,对T的左、右子树进行相同的创建操作
{
T=(BiTreePoint)malloc(sizeof(BiTreenode));
T->data=ch;//T的结点
CreateTree(T->lchild);//左子树
CreateTree(T->rchild); //右子树
}
}
void PreOrderTree(BiTreePoint &T)//前序遍历二叉树
{
if (T)//判断T是否为空树,非空则遍历这棵树
{
printf("%c ", T->data);//主节点
PreOrderTree(T->lchild);//左子树
PreOrderTree(T->rchild);//右子树
}
}
void InOrderTree(BiTreePoint &T)//中序遍历二叉树
{
if(T)
{
InOrderTree(T->lchild);
cout<<T->data<<' ';
InOrderTree(T->rchild);
}
}
void PostOrderTree(BiTreePoint &T)//后序遍历二叉树
{
if(T)
{
PostOrderTree(T->lchild);
PostOrderTree(T->rchild);
cout<<T->data<<' ';
}
}
void LengthTree(BiTreePoint &T)
{
if(T)
{
len++;
LengthTree(T->lchild);
LengthTree(T->rchild);
}
}
void LeavesTree(BiTreePoint &T)
{
if(T)
{
if(!T->lchild&&!T->rchild)
cout<<T->data<<' ';
LeavesTree(T->lchild);
LeavesTree(T->rchild);
}
}
void main()
{
BiTreePoint tree;
printf("前序输入的结点(叶子结点用#表示其左右结点)\n");
CreateTree(tree);
cout<<endl;
printf("前序遍历二叉树的顺序:");
PreOrderTree(tree);
cout<<endl;
cout<<"中序遍历二叉树的顺序:";
InOrderTree(tree);
cout<<endl;
cout<<"后序遍历二叉树的顺序:";
PostOrderTree(tree);
cout<<endl;
cout<<"所有的叶子结点:";
LeavesTree(tree);
cout<<endl;
LengthTree(tree);
cout<<"二叉树的长度为:"<<len<<endl;
system("pause");
}