二叉树的基本操作包括 构建二叉树,中序,先序,后序遍历二叉树,查找二叉树结点,叶子个数,查找二叉树的深度
基本代码如下
#include<stdio.h>
#include<stdlib.h>
#include<iostream>
using namespace std;
#define Error 0
#define Overflow -1
#define OK 1
#define Max(a,b) (a>b?)a:b
typedef char TElemtype; //树中元素初定为字符型
typedef int status;
typedef struct BiNode{
TElemtype date;
BiNode* lchild, * rchild;
}BiNode,*BiTree;
status visit(TElemtype e) {
printf("%c", e);
return OK;
}//输出树中数据,还可以改变为其他对树的操作
status creatBiTree(BiTree& T) {
char ch;
scanf_s(" %c", &ch);
if (ch == '#')
T = NULL;
else {
if (!(T = (BiNode*)malloc(sizeof(BiNode))))
return Error;
T->date = ch;
creatBiTree(T->lchild);
creatBiTree(T->rchild);
}
return OK;
}//采用先序方法输入二叉树的成员数据
status preOrder(BiTree T) {
if (!T)
return Error;
visit(T->date);
preOrder(T->lchild);
preOrder(T->rchild);
return OK;
}//先序方法遍历二叉树
status InOrder(BiTree T) {
if (!T)
return Error;
InOrder(T->lchild);
visit(T->date);
InOrder(T->rchild);
return OK;
}//中序方法遍历二叉树
status PostOrder(BiTree T) {
if (!T)
return Error;
PostOrder(T->lchild);
PostOrder(T->rchild);
visit(T->date);
return OK;
}//后序方法遍历二叉树
int Nodes(BiTree T) {
if (!T)
return 0;
//if (!T->lchild && !T->rchild)
//return 1;
return 1 + Nodes(T->lchild) + Nodes(T->rchild);
}//计算二叉树结点的个数
int Leaves(BiTree T) {
if (!T)
return 0;
if (!T->lchild && !T->rchild)
return 1;
return Leaves(T->lchild) + Leaves(T->rchild);
}//叶子个数
int high(BiTree T) {
if (!T)
return 0;
else {
return (high(T->lchild) > high(T->rchild) ? high(T->lchild) : high(T->rchild)) + 1;
}
}二叉树深度
int main() {
BiTree T;
creatBiTree(T);
preOrder(T);
printf("\n");
InOrder(T);
printf("\n");
PostOrder(T);
printf("\n");
printf("树的叶子数为%d", Leaves(T));
printf("\n");
printf("树的结点数为%d", Nodes(T));
printf("\n");
printf("树的深度为%d", high(T));
printf("\n");
return 0;
}
输入ABC##DE#G##F###
输出如下