二叉树怎么操作?

作者&投稿:晏樊 (若有异议请与网页底部的电邮联系)
怎么使用二叉树?~

#include "stdio.h"
#include "string.h"
#define NULL 0
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
BiTree Create(BiTree T){
char ch;
ch=getchar();
if(ch=='#')
T=NULL;
else{
if(!(T=(BiTNode *)malloc(sizeof(BiTNode))))
printf("Error!");
T->data=ch;
T->lchild=Create(T->lchild);
T->rchild=Create(T->rchild);
}
return T;
}
void Preorder(BiTree T){
if(T){
printf("%c",T->data);
Preorder(T->lchild);
Preorder(T->rchild);
}
}
int Sumleaf(BiTree T){
int sum=0,m,n;
if(T){
if((!T->lchild)&&(!T->rchild))
sum++;
m=Sumleaf(T->lchild);
sum+=m;
n=Sumleaf(T->rchild);
sum+=n;
}
return sum;
}
void zhongxu(BiTree T){
if(T){
zhongxu(T->lchild);
printf("%c",T->data);
zhongxu(T->rchild);
}
}
void houxu(BiTree T){
if(T){
houxu(T->lchild);
houxu(T->rchild);
printf("%c",T->data);
}
}
int Depth(BiTree T){
int dep=0,depl,depr;
if(!T) dep=0;
else{
depl=Depth(T->lchild);
depr=Depth(T->rchild);
dep=1+(depl>depr?depl:depr);
}
return dep;
}
main(){
BiTree T;
int sum,dep;
T=Create(T);
Preorder(T);
printf("
");
zhongxu(T);
printf("
");
houxu(T);
printf("
");
sum=Sumleaf(T);
printf("%d",sum);
dep=Depth(T);
printf("
%d",dep);
}
如果还有问题,自己借本数据结构看吧

二叉树建立方法:

一、我们要明确的一点是只有中序是无法创建二叉树的,它要结合先序,两者相联系才可以。

二、根据二叉树的图,得出先序的顺序是ABDECFG,而与此同时的中序DBEAFCG,根据这个建立。

三、然后就是要根据二叉树的原则编写代码,你要知道的是前序遍历序列中的首元素是二叉树的根节点。

四、然后你要做的是在中序遍历序列中找到这个节点,他是中间的分水岭,前面其左节点,后面是右节点。

五、最后要做的是建立根节点的左子树和右子树,再由中序 遍历序列中根节点的位置确定我们前面提到的子树的节点,这样二叉树就差不多建立完成了。

1.构造二叉树给定一棵二叉树,要对它进行操作必须先把它存储到计算机中,二叉树的存储可以采用顺序存储结构,也可以采用链式存储结构,链式存储结构有二叉链表和三叉链表等。在这里主要讨论二叉链表存储结构。

(1)以先序递归遍历思想建立二叉树。

①建立二叉树的根结点;②先序建立二叉树的左子树;③先序建立二叉树的右子树。

(2)构造二叉树的操作算法。

输入一个二叉树的先序序列,构造这棵二叉树。为了保证唯一地构造出所希望的二叉树,在键入这棵树的先序序列时,需要在所有空二叉树的位置上填补一个特殊的字符,比如#。在算法中,需要对每个输入的字符进行判断,如果对应的字符是#,则在相应的位置上构造一棵空二叉树;否则,创建一个新结点。整个算法结构以先序遍历递归算法为基础,二叉树中结点之间的指针连接是通过指针参数在递归调用返回时完成的。





二叉树怎么操作?
答:(1)以先序递归遍历思想建立二叉树。①建立二叉树的根结点;②先序建立二叉树的左子树;③先序建立二叉树的右子树。(2)构造二叉树的操作算法。输入一个二叉树的先序序列,构造这棵二叉树。为了保证唯一地构造出所希望的二叉树,在键入这棵树的先序序列时,需要在所有空二叉树的位置上填补一个特殊...

能否麻烦列出几种二叉树常用的操作
答:先访问左子树,再访问右子树,最后访问根结点的次序访问二叉树中所有的结点,且每个结点仅访问一次 void postorder(btree p){ if(p!=NULL){ postorder(p->left);postorder(p->right);printf("%d",p->data);} } 4.输出二叉树 首先输出根结点,然后再输出它的左子树和右子树.依次输出的左,右子树...

二叉树的操作及其应用:1、以二叉链表作存储结构,试编写前序、中序...
答:printf("按先序次序输入二叉树中结点的值,输入0表示节点为空,输入范例:1 2 0 0 3 0 0\n");CreateBiTree(T); // 建立二叉树T printf("先序递归遍历二叉树:\n");PreOrderTraverse(T,visit); // 先序递归遍历二叉树T printf("\n中序递归遍历二叉树:\n");...

在二叉排序树上进行插入、查找及删除等操作?
答:插入操作 对于插入操作,我们需要首先遍历二叉排序树,找到插入节点的位置。具体步骤如下:如果二叉排序树为空,则新节点成为根节点 如果插入节点的值等于当前节点的值,则插入失败,结束操作 如果插入节点的值小于当前节点的值,则在左子树中继续查找插入位置 如果插入节点的值大于当前节点的值,则在右子树...

急!~编写一个C++语言程序,对二叉树实现操作
答:二叉树采用二叉链表作存储结构,编程实现二叉树的如下基本操作:1. 按先序序列构造一棵二叉链表表示的二叉树T;2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历序列,分别输出结点的遍历序列;3. 求二叉树的深度/结点数目/叶结点数目;4. 将二叉树每个结点的左右子树交换位置。【数据...

二叉树的基本操作 C语言版的
答:BiTNode *creatBT(BiTNode *t,int b)//2、创建二叉树 { BiTNode *p;char ch;cin>>ch;if(ch=='#')return 0;else { p=new BiTNode;p->data=ch;p->parent=t;p->bit=b;t=p;t->lchild=creatBT(t,0);t->rchild=creatBT(t,1);} return t;} void preorder(BiTNode *t)//3、...

数据结构二叉树的基本操作~~~
答:用递归的方法实现以下算法:1.以二叉链表表示二叉树,建立一棵二叉树;2.输出二叉树的前序遍历结果;3.输出二叉树的中序遍历结果;4.输出二叉树的后序遍历结果;5.统计二叉树的叶结点个数;6.统计二叉树的结点个数;7.计算二叉树的深度。8.交换二叉树每个结点的左孩子和右孩子;include <...

什么是二叉树?
答:(4) (Dl, Hl) 是一棵合本定义的二叉树,称为根 r的左子树 ,(Dr,Hr)是一棵符合定义的二叉树,称为根的右子树。 其中,图 6.2 是各种形态的二叉树 . (1) 为空二叉树 (2)只有一个根结点的二叉树 (3)右子树为空的二叉树 (4)左子树为空的二叉树 (5)完全二叉树 二叉树的基本操作: (1)INITIATE(...

平衡二叉树的操作(高手进)
答:///删除平衡平衡二叉树的结点e,并保持平衡二叉树的性质。int Preordertraverse(bstree T)///按先序遍历平衡二叉树。/---***平衡二叉树的操作的详细算法bstree InsertAVL(bstree &T, int e){ bstree p; //插入新结点,树长高置taller为TRUE if(!T) { T=(bstree)malloc(sizeof(BSTnode)); T-...

树和二叉树的运行与操作
答:转化:直觉上,最简单的二叉树存储方式。首先,提供个满二叉树大小的数组,然后其中数值按完全二叉树存储。显然,此种顺序存储方法:第i号(这里编号指对应的完全二叉树的位序)结点的左右孩子一定保存在第2i及2i+1号单元中。故此,为兼顾存储的直观与遍历等操作的方便,从顺序数组向左右子节点存储方式...