数据结构二叉树——建立二叉树、中序递归遍历、非递归遍历、层次遍历

数据结构二叉树——

编写函数实现:建立二叉树、中序递归遍历、借助栈实现中序非递归遍历、借助队列实现层次遍历、求高度、结点数、叶子数及交换左右子树。

("."表示空子树)

#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)
  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值