数据结构二叉树——
编写函数实现:建立二叉树、中序递归遍历、借助栈实现中序非递归遍历、借助队列实现层次遍历、求高度、结点数、叶子数及交换左右子树。
("."表示空子树)
#include<stdio.h>
#include<stdlib.h>
//***********二叉树链表节点结构
typedef char DataType;
typedef struct Node
{
DataType data;
struct Node*LChild;
struct Node*RChild;
}BiTNode,*BiTree;
void Insert_tree(BiTree *T)
{
char ch;
ch = getchar();
if (ch == '.')//"."表示空子树
*T = NULL;
else
{
*T = (BiTree)malloc(sizeof(BiTNode));
(*T)->data = ch;
Insert_tree(&((*T)->LChild));
Insert_tree(&((*T)->RChild));
}
}
//*************二叉树的中序递归遍历
void InOrder(BiTree root)
{
if (root != NULL)
{
InOrder(root->LChild);
printf("%c ",root->data);
InOrder(root->RChild);
}
}
//****************二叉树的中序非递归遍历算法(调用栈操作)
#define Stack_Size 50
typedef struct //顺序栈结构
{
BiTree elem[Stack_Size];
int top; //用来存放栈顶元素的下标,top为-1表示空栈
}SeqStack;
void InitStack(SeqStack *S)// 顺序栈初始化
{
S->top = -1; //制造一个空栈
}
int Push(SeqStack *S, BiTree x) //顺序进栈
{
if (S->top == Stack_Size - 1)
return 0; //栈已满
S->top++;
S->elem[S->top] = x;
return 1;
}
int Pop(SeqStack * S, BiTree *x)//顺序出栈
{
if (S->top == -1) //栈为空
return 0;
else
{
*x = S->elem[S->top];
S->top--;
return 1;
}
}
int IsEmpty(SeqStack *s)
{
return s->top == -1 ? 0 : 1;
}
void InOrder_2(BiTree root) //二叉树的中序非递归遍历
{
BiTree p;
SeqStack S;
InitStack(&S);
p = root;
while (p != NULL|| IsEmpty(&S))
{
if (p != NULL)
{
Push(&S, p)