用二叉链表存储结构表示下图所示二叉树的,并用递归方法输出三种遍历结果。

用二叉链表存储结构表示下图所示二叉树的,并用递归方法输出三种遍历结果。

第1个回答  2010-05-18
//上机题3,已在VC下调试成功。
#include<stdio.h>
#include<malloc.h>
#define MAXSIZE 30
typedef struct bnode{
char data;
struct bnode *lchild,*rchild;
}Bnode,*BTree;
typedef BTree DataType;
typedef struct{
DataType data[MAXSIZE];
int top;
}SeqStack,*PseqStack;//定义一个线性表栈
PseqStack Init_SeqStack(void)
{
PseqStack S;
S=(PseqStack)malloc(sizeof(SeqStack));
if(S)
S->top=-1;
return(S);
}//初始化栈。
int Empty_SeqStack(PseqStack S)
{
if(S->top==-1)
return(1);
else return (0);
}//判断是否栈空
int Push_SeqStack(PseqStack S,DataType x)
{
if(S->top==MAXSIZE-1)
return (0);
else
{
S->top++;
S->data[S->top]=x;
return (1);
}
}//入栈。
int Pop_SeqStack(PseqStack S,DataType *x)
{
if(Empty_SeqStack(S))
return (0);
else
{
*x=S->data[S->top];
S->top--;
return (1);
}
}//出栈。
BTree CreateBinTree(void)
{
BTree t;
char ch;
ch=getchar();
if(ch=='#') t=NULL;
else
{
t=(Bnode*)malloc(sizeof(Bnode));
t->data=ch;
t->lchild=CreateBinTree();
t->rchild=CreateBinTree();
}
return t;
}//创建一个二叉树。
void Visit(BTree t)
{
if(t!=NULL)
printf("%c ",t->data);
}//访问结点t。
void InOrder(BTree t)
{
if(t)
{
InOrder(t->lchild);
Visit(t);
InOrder(t->rchild);
}
}//二叉树的递归中序遍历。
int HighTree(BTree p)
{
int h1,h2;
if(p==NULL) return 0;
else
{
h1=HighTree(p->lchild);
h2=HighTree(p->rchild);
if(h1>h2) return (h1+1);
return (h2+1);
}
}//递归求二叉树的高度。
void PreOrder(BTree t)
{
PseqStack S;
BTree p=t;
S=Init_SeqStack();
while(p||!Empty_SeqStack(S))
{
if(p)
{
Visit(p);
Push_SeqStack(S,p);
p=p->lchild;
}
else
{
Pop_SeqStack(S,&p);
p=p->rchild;
}
}
}//二叉树的非递归先序遍历。

void main()
{
BTree T;
int a;
printf("输入二叉树的先序排列(空的地方输入#):");
T=CreateBinTree();
printf("输出二叉树的先序遍历: ");
PreOrder(T);
printf("\n");
printf("输出二叉树的中序遍历: ");
InOrder(T);
printf("\n");
a=HighTree(T);
printf("二叉树的高度是: %d\n",a);
}
输入是输入12##346###5##本回答被提问者采纳

写出如下二叉树三种遍历的结果
1、前序遍历(DLR),首先访问根结点,然后遍历左子树,最后遍历右子树。2、中序遍历(LDR),首先遍历左子树,然后访问根结点,最后遍历右子树。3、后序遍历(LRD)首先遍历左子树,然后访问遍历右子树,最后访问根结点。二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最...

建立二叉链表存储下图所示的二叉树
建立二叉链表存储下图所示的二叉树 我们使用C语言实现了一个程序来建立和操作二叉树。程序中定义了一个二叉树节点结构体BTNode,包含数据数据域data,左孩子lchild和右孩子rchild。程序包括创建树、前序遍历、中序遍历和后序遍历四个函数。创建树函数CreateTree()通过接收一个字符数组str,按照括号和逗号的...

1用递归实现二叉树的先序、中序、后序三种遍历。2哈夫曼树问题
1通过调试为下面的二叉树建立二叉链表,并用递归实现二叉树的先序、中序、后序三种遍历。2[基本要求]: A:从终端读入字符集大小为n,及n个字符和n个权值,建立哈夫曼树,进行编码并且输出。并将它存于文件hfmtree中。 B:利用已建好的哈夫曼编码文件hfmtree,对键盘输入的正文进行译码。输出字符正文,再输出该文的二...

遍历二叉树
后序遍历二叉树时,对结点的访问次序为后序序列 【例】后序遍历上图所示的二叉树时,得到的后序序列为:D B E F C A (4)层次遍历(level traversal)二叉树的操作定义为:若二叉树为空,则退出,否则,按照树的结构,从根开始自上而下,自左而右访问每一个结点,从而实现对每一个结点的遍历...

二叉树遍历演示
}二叉树用链式存储结构表示时,按层遍历的算法实现访问过程描述如下:访问根结点,并将该结点记录下来;若记录的所有结点都已处理完毕,则结束遍历操作;否则重复下列操作。取出记录中第一个还没有访问孩子的结点,若它有左孩子,则访问左孩子,并将记录下来;若它有右孩子,则访问右孩子,并记录下来。

二叉树的遍历
对任意给定的二叉树(顶点数自定)建立它的二叉链表存储结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判栈空)实现二叉树的先序、中序、后序三种遍历,输出三种遍... 对任意给定的二叉树(顶点数自定)建立它的二叉链表存储结构,并利用栈的五种基本运算(置空栈、进栈、出栈、取栈顶元素、判...

设二叉树的存储结构为二叉链表,编写有关二叉树的递归算法:
\/\/中序遍历 void InOrder(BiTree *t){ BiTree **stack, **top, *p;\/\/创建堆栈 if (!(stack = (BiTree**)malloc(NUM_NODE * sizeof(BiTree))){ printf("InOrder failed for memery\\n");return;} \/\/初始化堆栈 top = stack;p = t;while (p || top>stack)\/\/p不为NULL,堆栈...

数据结构—二叉树的4种遍历方式详解以及Java代码的完整演示
数据结构—二叉树的4种遍历方式详解以及Java代码的完整演示二叉树的遍历(traversing binary tree)是指从根节点出发,按照某种次序依次访问二叉树中所有结点,使得每个结点被访问一次且仅被访问一次。本文介绍了4种

运用C++如何使用二叉链表存储二叉树,遍历输出叶子节点路径,递归输出...
构造的二叉树结构如下:运行结果如下:代码如下:include <iostream>#include <vector>using namespace std;typedef struct tnode \/\/定义树节点结构{int val;tnode* left;tnode* right;tnode(int x=0):val(x),left(NULL),right(NULL){}\/\/默认构造函数}TreeNode,*pTreeNode;void getPath(Tree...

用先序构造一棵二叉树,并以三种遍历方式遍历。程序求改, 最好能请指出...
define ERROR 0 define OVERFLOW -2 typedef char TElemType;\/\/字符录入 typedef int Status;typedef struct BiTNode\/\/注意采用的是二叉链表作为二叉树的存储结构 { TElemType data;struct BiTNode *lchild,*rchild;}BiTNode, *BiTree;Status CreateBiTree_PreOrder(BiTree &T) \/\/先序次序构造二叉树 {...

相似回答