数据结构—二叉树的建立及输出-递归

二叉树的建立及输出,问题描述:
(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");
}

猜你喜欢

转载自blog.csdn.net/qq_41596915/article/details/84481996