数据结构二叉树的建立平衡二叉树

当前访客身份:游客 [
当前位置:
发布于 日 9时,
&无详细内容&
代码片段(1)
1.&[代码][C/C++/Objective-C]代码&&&&
#ifndef _BITREE_
#define _BITREE_
#include &iostream&
#include &string&
template &class T&
struct BiNode
//二叉树的结点结构
BiNode&T& * leftC
BiNode&T& * rightC
template &class T&
class BiTree
//构造函数,初始化一棵二叉树,其前序序列由键盘输入
~BiTree();
//析构函数,释放二叉链表中各结点的存储空间
BiNode&T& * Getroot();
//获得指向根结点的指针
void PreOrder(BiNode&T& * root);
//前序遍历二叉树
void InOrder(BiNode&T& * root);
//中序遍历二叉树
void PostOrder(BiNode&T& * root);
//后序遍历二叉树
void LeverOrder(BiNode&T& * root);
//层序遍历二叉树
BiNode&T& *
//指向根结点的头指针
BiNode&T& * Creat( );
//构造函数调用
void Release(BiNode&T& * root);
//析构函数调用
/****************************************************/
定义类中的成员函数
/****************************************************/
*前置条件:二叉树不存在
能:构造一棵二叉树
*后置条件:产生一棵二叉树
template &class T&
BiTree&T&::BiTree()
this-&root = Creat();
*前置条件:二叉树已存在
能:释放二叉链表中各结点的存储空间
*后置条件:二叉树不存在
template &class T&
BiTree&T&::~BiTree()
Release(root);
*前置条件:二叉树已存在
能:获取指向二叉树根结点的指针
出:指向二叉树根结点的指针
*后置条件:二叉树不变
template &class T&
BiNode&T& * BiTree&T&::Getroot( )
*前置条件:二叉树已存在
能:前序遍历二叉树
出:二叉树中结点的一个线性排列
*后置条件:二叉树不变
template &class T&
void BiTree&T&::PreOrder(BiNode&T& * root)
if(root==NULL)
cout&&root-&data&&" ";
PreOrder(root-&leftChild);
PreOrder(root-&rightChild);
*前置条件:二叉树已存在
能:中序遍历二叉树
出:二叉树中结点的一个线性排列
*后置条件:二叉树不变
template &class T&
void BiTree&T&::InOrder (BiNode&T& * root)
if(root==NULL)
//递归调用的结束条件
InOrder(root-&leftChild);
//中序递归遍历root的左子树
cout&&root-&data&&" ";
//访问根结点的数据域
InOrder(root-&rightChild);
//中序递归遍历root的右子树
*前置条件:二叉树已存在
能:后序遍历二叉树
出:二叉树中结点的一个线性排列
*后置条件:二叉树不变
template &class T&
void BiTree&T&::PostOrder(BiNode&T& * root)
if(root==NULL)
//递归调用的结束条件
PostOrder(root-&leftChild);
//后序递归遍历root的左子树
PostOrder(root-&rightChild);
//后序递归遍历root的右子树
cout&&root-&data&&" ";
//访问根结点的数据域
*前置条件:二叉树已存在
能:层序遍历二叉树
出:二叉树中结点的一个线性排列
*后置条件:二叉树不变
template &class T&
void BiTree&T&::LeverOrder(BiNode&T& * root)
const int MaxSize = 100;
int front = 0;
int rear = 0;
//采用顺序队列,并假定不会发生上溢
BiNode&T&* Q[MaxSize];
BiNode&T&*
if (root==NULL)
Q[rear++] =
while (front != rear)
q = Q[front++];
cout&&q-&data&&" ";
if (q-&leftChild != NULL)
Q[rear++] = q-&leftC
if (q-&rightChild != NULL)
Q[rear++] = q-&rightC
*前置条件:空二叉树
能:初始化一棵二叉树,构造函数调用
*后置条件:产生一棵二叉树
template &class T&
BiNode&T& * BiTree&T&::Creat( )
BiNode&T& *
cout&&"请输入创建一棵二叉树的结点数据"&&
if (ch=="#")
root = NULL;
root = new BiNode&T&;
//生成一个结点
root-&data=
root-&leftChild = Creat( );
//递归建立左子树
root-&rightChild = Creat( );
//递归建立右子树
*前置条件:二叉树已经存在
能:释放二叉树的存储空间,析构函数调用
*后置条件:二叉树不存在
template &class T&
void BiTree&T&::Release(BiNode&T& * root)
if (root != NULL)
Release(root-&leftChild);
//释放左子树
Release(root-&rightChild);
//释放右子树
开源中国-程序员在线工具:
相关的代码(21)
4回/11814阅
13回/9251阅
2回/5794阅
5回/3313阅
0回/3333阅
4回/2996阅
7回/2758阅
0回/2677阅
3回/2539阅
0回/2478阅
这个代码只有在类型为字符时才有用,而且对内部机制暴露太多,典型的就是允许用户获取root指针。
既然GetRoot只在类中用,就应该把它的访问控制设置为private,如果考虑可能会有继承,就设置为protected.
还有遍历函数应设置为const类型,这样才能为该类型的常对象提供一个对外接口。
2楼:涛声依旧宝儿 发表于
怎么下载呀
3楼:涛声依旧宝儿 发表于
怎么下载呀
4楼:kobechen 发表于
root是不应该定义为静态的
开源从代码分享开始
老鱼的饵的其它代码下次自动登录
现在的位置:
& 综合 & 正文
寒假训练–树与二叉树–数据结构实验之二叉树的建立与遍历
数据结构实验之二叉树的建立与遍历
Time Limit: 1000MS Memory limit: 65536K
已知一个按先序序列输入的字符序列,如abc,,de,g,,f,,,(其中逗号表示空节点)。请建立二叉树并按中序和后序方式遍历二叉树,最后求出叶子节点个数和二叉树深度。
输入一个长度小于50个字符的字符串。
输出共有4行:
第1行输出中序遍历序列;第2行输出后序遍历序列;第3行输出叶子节点个数;第4行输出二叉树深度。
abc,,de,g,,f,,,
cbegdfacgefdba35
DBEFCA#include &stdio.h&
#include &stdlib.h&
#include &math.h&
typedef struct node{
node *lchild , *
//建立一个先序的二叉树
void low(tree &t)
scanf("%c", &ch);
if(ch==',') t = NULL ;
low(t-&lchild);
low(t-&rchild);
//中序遍历
void mid(tree t)
mid(t-&lchild);
printf("%c", t-&data);
mid(t-&rchild);
//后序遍历
void high(tree t)
high(t-&lchild);
high(t-&rchild);
printf("%c", t-&data);
int leaf(tree t,int &num)
if(!t-&lchild && !t-&rchild)
if(t-&lchild) leaf(t-&lchild,num);
if(t-&rchild) leaf(t-&rchild,num);
int getdepth(tree t)
int depth = 0;
int nl = getdepth(t-&lchild);
int nr = getdepth(t-&rchild);
if(nr & nl)
depth = nr+1;
depth = nl+1;
int main()
int num = 0 ;
low(head);
mid(head);
printf("\n");
high(head);
printf("\n");
leaf(head,num);
printf("%d\n", num);
printf("%d\n", getdepth(head));
&&&&推荐文章:
【上篇】【下篇】> 数据结构二叉树问题求建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(线序,中序和后序),打印输
数据结构二叉树问题求建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(线序,中序和后序),打印输
supermaldini & &
发布时间: & &
浏览:156 & &
回复:4 & &
悬赏:0.0希赛币
数据结构二叉树问题求建立一棵用二叉链表方式存储的二叉树,并对其进行遍历(线序,中序和后序),打印输出便利结果的可运行通过的程序。测试数据ABC##DE#G##F### & 求高手指教
主要采用的数据结构如下:  Java code  // 二叉树节点类
class BNode {
O// 存放的数据
BN// 左孩子
BN// 右孩子
superman2603 & &
& & (0)(0)递归调用nest(note*){next(note*)visit()next(note*)}
superman2603 & &
& & (0)(0)  C/C++ code  #include &stdio.h&
#include &stdlib.h&
typedef struct BiTNode
struct BiTNode *
struct BiTNode *
BiTNode *CreatBiTree();
void PreOrderTraverse(BiTNode *);
void InOrderTraverse(BiTNode *);
void PostOrderTraverse(BiTNode *);
void DestroyBiTree(BiTNode **);
int main()
BiTNode *pT = CreatBiTree();
PreOrderTraverse(pT);
printf(&\n&);
InOrderTraverse(pT);
printf(&\n&);
PostOrderTraverse(pT);
printf(&\n&);
DestroyBiTree(&pT);
BiTNode *CreatBiTree()
BiTNode *p;
ch = getchar();
if (ch == EOF)
return NULL;
getchar();
p = (BiTNode *)malloc(sizeof(BiTNode));
p-&lchild = CreatBiTree();
p-&rchild = CreatBiTree();
void PreOrderTraverse(BiTNode *pT)
if (pT != NULL)
printf(&%c &, pT-&data);
PreOrderTraverse(pT-&lchild);
PreOrderTraverse(pT-&rchild);
void InOrderTraverse(BiTNode *pT)
if (pT != NULL)
InOrderTraverse(pT-&lchild);
printf(&%c &, pT-&data);
InOrderTraverse(pT-&rchild);
void PostOrderTraverse(BiTNode *pT)
if (pT != NULL)
PostOrderTraverse(pT-&lchild);
PostOrderTraverse(pT-&rchild);
printf(&%c &, pT-&data);
void DestroyBiTree(BiTNode **pT)
if (*pT != NULL)
DestroyBiTree(&(*pT)-&lchild);
DestroyBiTree(&(*pT)-&rchild);
free(*pT);
superman2603 & &
& & (0)(0)#include&stdio.h&#include&stdlib.h&typedef struct binode{
struct binode *lchild,*}binode,*///////////////////////////////////////////////////bitree createbitree(){
x=getchar(); if(x=='#')
t=NULL; else {
t=(binode*)malloc(sizeof(binode));
t-&data=x;
t-&lchild=createbitree();
t-&rchild=createbitree(); } }////////////////////////////////////////////////////void preordertraverse(bitree t){ if(t) {
printf(&%4c&,t-&data);
preordertraverse(t-&lchild);
preordertraverse(t-&rchild);
}}////////////////////////////////////////////////////void preordertraverse2(bitree t){ if(t) {
preordertraverse2(t-&lchild);
preordertraverse2(t-&rchild);
printf(&%4c&,t-&data);
}}//////////////////////////////////////void preordertraverse3(bitree t){ if(t) {
preordertraverse3(t-&lchild);
printf(&%4c&,t-&data);
preordertraverse3(t-&rchild);
}}/////////////////////////////////////////////int main(){
t=createbitree(); printf(&前序遍历:\n&);
preordertraverse(t); printf(&\n&); printf(&中序遍历:\n&);
preordertraverse2(t); printf(&\n&); printf(&后序遍历:\n&);heigeer111 & &
& & (0)(0)
本问题标题:
本问题地址:
温馨提示:本问题已经关闭,不能解答。
暂无合适的专家
&&&&&&&&&&&&&&&
希赛网 版权所有 & &&打酱油震惊呵呵赞鄙视标签: ,,注:与内容无关的评论将被删除,严重者禁用帐号! | 最新评论不吐不快,赶紧来一发!栏目推荐热门点击本站推荐
| 中国最专业的PHP中文社区 |
Copyright (C) 1998 - . All Rights Reserved
第一PHP社区
版权所有 七牛云存储为本站提供加速支持 &&&&&}

我要回帖

更多关于 建立平衡二叉树 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信