c语言 关于二叉树的创建和遍历(中序遍历)
#include "iostream.h"
//#include "exception.h"
//树节点类
int count=0,mode=0,data=0;
class BinaryTreeNode
{
friend class BinaryTree;
public :
BinaryTreeNode()
{
LeftChild = RightChild = 0;
}
BinaryTreeNode(const int& e)
{
data = e;
LeftChild = RightChild = 0;
}
BinaryTreeNode(const int& e, BinaryTreeNode *l,BinaryTreeNode *r)
{
data = e;
LeftChild = l;
RightChild = r;
}
private :
int data;
BinaryTreeNode *LeftChild, //左子树
*RightChild; // 右子树
} ;
class BinaryTree
{
friend class BinaryTreeNode;
public :
BinaryTree( )
{
root = 0;
}
~ BinaryTree( ) { }
bool IsEmpty( ) const
{
return ((root) ? false : true);
}
bool Root(int& x) const
{// 取根节点的d a t a域,放入x
// 如果没有根节点,则返回f a l s e
if (root)
{
x = root->data;
return true;
}
else return false; // 没有根节点
}
void MakeTree(const int& element)
{
root = new BinaryTreeNode (element);
}
void MakeTree(const int& element,BinaryTree& left,BinaryTree& right)
{// 将left, right和element 合并成一棵新树
// left, right和this必须是不同的树
// 创建新树
root = new BinaryTreeNode (element, left.root, right.root);
// 阻止访问l e f t和r i g h t
left.root = right.root = 0;
}
void Inorder(void (*Visit) (BinaryTreeNode *u))
{
InOrder ( Visit,root ) ;
}
void Delete( )
{
PostOrder (Free,root);
root = 0;
}
private :
BinaryTreeNode *root; // 根节点指针
static void Free(BinaryTreeNode *t)
{
delete t;
}
void InOrder(void(*Visit) (BinaryTreeNode *u),BinaryTreeNode *t)
{// 中序遍历
if (t)
{
InOrder(Visit, t->LeftChild);
Visit( t ) ;
InOrder( Visit, t->RightChild);
}
}
#include <stdio.h>
#include <malloc.h>
#define MaxSize 10
#define Number 30
struct BiTNode{//定义数据结构
char data;
BiTNode *lchild,*rchild;
};
void InitBtree(BiTNode * &BT){//初始化二叉树
BT=NULL;
}
void CreateBiTree(BiTNode *&BT,char *str){//建立二叉树
BiTNode *s[MaxSize];//这里定义了一个数组用作堆栈方便检查输入和操作
int top=-1;
BT=NULL;
BiTNode *p=NULL;
int k, j=0;
char ch;
ch=str[j];
while(ch!='\0'){
switch(ch){
case '(':
top++;
s[top]=p;
k=1;
break;
case ')':
top--;
break;
case ',':
k=2;
break;
default:
p=(struct BiTNode *) malloc(sizeof(struct BiTNode));
p->data=ch;
p->lchild=p->rchild=NULL;
if(BT==NULL)
BT=p;
else{
if(k==1)
s[top]->lchild=p;
else
s[top]->rchild=p;
}
}
j++;
ch=str[j];
}
}
void inorder(BiTNode *BT){//中序遍历二叉树——递归形式
if(BT!=NULL){
inorder(BT->lchild );
printf("%c ",BT->data);
inorder(BT->rchild );
}
}
void main(){
BiTNode *BT;
printf("以广义表形式表示输入的二叉数 (如A(B(C,D),E(,F))的形式)\n\n");
char string[Number]="A(B(,C),D(E(F),G(,H)))";
//如果想要自己输入,可以将下边的注释去掉,然后自己按照广义表形式输入,
//(如上例的形式)此处为了方便查看,用了默认的数值
//这里之所以用此种形式(广义表形式输入)是为了保证输入的数组成的二叉树完全符合你所定义的树的形状
/*char string[Number],ch;
int i=0;
ch=getchar();
while(ch!='\n' && i<Number){
string[i]=ch;
i++;
ch=getchar();
}
string[i]='\0';
*/
InitBtree(BT);//初始化二叉树
CreateBiTree(BT,string);//创建二叉树
printf("\n中序遍历二叉树顺序为: ");
inorder(BT);//中序遍历二叉树
printf("\n");
}
程序不复杂,所以只是加了必要和最简单的注释,相信你看看应该完全可以理解的,祝你进步!
凌嵇乐松: 我写了一个二叉树你给看看 一定能行的我自己用了#include "stdio.h"#include "malloc.h"#include "string.h"#include "stdlib.h"#define Max 20 //结点的最大个数typedef struct BinTNode{char data;struct BinTNode *lchild,*rchild; ...
合阳县18644501655: 请问C语言如何创建二叉树???? - ?
凌嵇乐松: 创建二叉树的源程序如下: #include <cstdlib>#include <stdio.h>typedef struct node{ //树的结点int data;struct node* left;struct node* right;} Node;typedef struct{ //树根Node* root;} Tree;void insert(Tree* tree, int value)//创建树{Node* ...
合阳县18644501655: 二叉排序树创建遍历C语言实现? - ?
凌嵇乐松: 我给你一个更加完整的吧. #include <stdio.h> #include <stdlib.h>typedef int DataType;typedef struct BTree{DataType data;struct BTree *Tleft;struct BTree *Tright; }*BTree;BTree CreateTree(); //建树 BTree insert(BTree root, DataType ...
合阳县18644501655: 用c语言编程实现二叉树的建立和遍历二叉树? - ?
凌嵇乐松: //这是我上数据结构写的 建议理解为主#include#include#define ERROR 0#define OK 1#define OVERFLOW -2#define FLASE 0#define TURE 1 typedef int Status; typedef char TElemType; typedef struct BiTNode{ TElemType data; struct BiTNode ...
合阳县18644501655: 二叉树遍历(c语言实现) - ?
凌嵇乐松: #include <stdio.h>#include <malloc.h> typedef struct node{ int data; struct node *lchild,*rchild; }*treetp,tree; treetp create (treetp t,int c); void print1(treetp); void print2(treetp); void print3(treetp); int number=0; void main() { treetp t=0,r;r=create (t,0);...
合阳县18644501655: 急求C语言写二叉树的遍历 - ?
凌嵇乐松: 下面是一个用递归方法编的二叉树遍历程序,供lz参考. #include <stdio.h>//头文件#include <stdlib.h>#include <malloc.h> typedef struct bitnode { char data; struct bitnode *lchild,*rchild; } bitnode,*bitree;//定义结点类型 bitree createbitree()//创...
合阳县18644501655: c语言 二叉树的遍历 - ?
凌嵇乐松: //---------------------------------------------------------------------------#include<iostream> using namespace std; typedef struct node { struct node *L,*R; string name; }NODE;//输入 void Input(NODE **T,int num) { string name; int L,R; *T = new NODE[num]; for (...
合阳县18644501655: 二叉树的创建和遍历演示(数据结构c语言版)?
凌嵇乐松: 等一下,我好好研究一下数据结构,努力编写一下,看看可不可以做出来. 把函数写好了. typedef struct bnode { char data; struct bnode *lchild,*rchild; }Btree; void preorder(Btree *p)//先序遍历 { if(p!=NULL) {printf("%c",p->data); preorder(p->...
合阳县18644501655: c语言 关于二叉树的创建和遍历(中序遍历) - ?
凌嵇乐松: 这个还是我学《数据结构》时做的有关二叉树的练习呢,本来是全的,包括树的初始化,建立,遍历(中序、前序、后序和层次),还有输出,复制,删除节点,求深度,树的删除等等,看你只问了有关创建和中序遍历的,所以选了一部分给你...
合阳县18644501655: 二叉树的建立与遍历(C++) - ?
凌嵇乐松: //先定义数据类型 #typedef struct BiTNode{char data;struct BiTNode *lchild,*rchild;}BiTNode,*BiTree;//data你想用什么类型自己变就行了//建树也用递归 void createTree(char data,BiTree &T)//用引用 {char c; 输入c; if(c!=NULL){T=(BiTree)malloc(...