请帮忙做一个关于二叉树的题。

landay001 2006-03-29 06:59:12
明天下午要交作业,没做过二叉树的东东,不会做,请前辈帮忙,小弟感激不尽。(在TC环境下实现)

题目: 输入一串字符,按字母顺序构造一棵二叉排序树,每个结点的值就是一个字符。然后求该树的深度、叶子结点数,再按中序遍历打印出来。
...全文
121 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LoveCreatesBeauty 2006-03-30
  • 打赏
  • 举报
回复
From: manochavis...@gmail.com - view profile
Date: Wed, Mar 29 2006 8:29 pm
Groups: comp.lang.c

<snip>

This is not a friendship or making friends site. This is group where
people post queries regarding the C language. So if you want to learn
'C' try reading 'C' books and making them as friends and come back with
any queries you got.

Cheers
Vishal



From: Vladimir S. Oka - view profile
Date: Wed, Mar 29 2006 8:35 pm
Groups: comp.lang.c

<snip>

we can
arrange direct delivery to your teacher, if you provide us with their
e-mail address, and a cheque for one day's consulting fees, at a rate
to be negotiated.


--
BR, Vladimir
jixingzhong 2006-03-29
  • 打赏
  • 举报
回复
二叉树 的建立楼主可以在 论坛中搜索 ...

记得直接就有符合楼主要求的程序艾 ~
(字母建立 二叉树 有人问过的 ~)
yinqing_yx 2006-03-29
  • 打赏
  • 举报
回复
计算高度
class BinaryTree
{
public:
int Height() const {return Height(root);}
private:
int Height(BinaryTreeNode<T> *t) const;
};

template <class T>
int BinaryTree<T>::Height(BinaryTreeNode<T> *t)const
{
if(!t)
{
return 0;
}

//hl:height of leftTree
//hr:height of rightTree

int hl = Height(t->leftChild);
int hr = Height(t->RightChild);

if(hl > hr)
{
return ++hl;
}
else
{
return ++hr;
}
}

统计节点数:

int _count;
static void Add1(BianryTreeNode<T> *t)
{
_count++;
}

int Size()
{
_count = 0;
PreOrder(Add1, root);
return _count;
}
jixingzhong 2006-03-29
  • 打赏
  • 举报
回复
//二叉树的建立‘先序遍历’中序‘后序遍历
#include<iostream.h>
#include<stdlib.h>
typedef char ElemType;
typedef struct BinaryTree{
ElemType data;
struct BinaryTree *lchild, *rchild;
};

void CreatBiTree (BinaryTree *BT) //按先序遍历二叉树
{
cout<<"\nInput datas to creat binarytree, use ^ to ned, use Enter to device two datas!"<<endl;
char ch;
cin>>ch;
if(ch=='^') BT=NULL;
else{
BT=(BinaryTree*)malloc(sizoef(BinaryTree));
if(!BT) Error("Fail to malloc space!");
BT->data=ch;
CreatBiTree(BT->lchild);
CreatBiTree(BT->rchild);
}
}

//二叉树的遍历 
void TraverBiTree(BinaryTree *BT,int mark)
{
switch(mark)
{
case 1: //先序遍历
if(BT!=NULL)
{cout<<BT->data<<" ";
TraverBiTree(BT->lchild,mark);
TraverBiTree(BT->rchild,mark);
}//if
case 2: //中序遍历 
if(BT!=NULL){
TraverBiTree(BT->lchild,mark);
cout<<BT->data<<" ";
TraverBiTree(BT->rchild,mark);
}//if
case 3: //后序遍历
if(BT!=NULL){
TraverBiTree(BT->lchild,mark);
TraverBiTree(BT->rchild,mark);
cout<<BT->data<<" ";
}//if
case 4: //按层次遍历
const MaxLength=30;
BinaryTree *Q[MaxLength]; //定义存储二叉树结点指针的数组空间作为队列用
int front=0,rear=0,
BinaryTree *p;
if(BT!=NULL){
rear=(rear+1)%MaxLength ; //队尾指针后移
Q[rear]=BT;
}//if
while(front!=rear)
{
front=(front+1)%Maxlength;
p=Q[front];
cout<<p->data<<" ";
if(p->lchild!=NULL)
{ rear=rear+1)%MaxLength;
Q[rear]=p->lchild;
}//if
if(p->rchild!=NULL)
{
rear=(rear+1)%MaxLength;
Q[rear]=p->rchild;
}//if
}
default:
cerr<<"\nmark is out of range! fail to traverBiTree!"<<endl;
getch();
exit(1);
}
}

void Error(char *ms)
{
cout<<*ms<<endl;
exit(1);
}

void main()
{
BinaryTree *BT;
//int mark,i,j;
//ElemType elem;
int flag1, flag2;
cout<<"\nThis is a BinaryTree : 1: Creat Binary Tree 2:Traver binary tree
cin>>flag1;
switch(flag1)
{
case 1:
CreatBiTree(BT);
break;
case 2:
int flag;
cout<<"\n1:preorder creat 2: In Order Treaver 3: Post Order Traver
4: levels Order Traver"<<endl;
cin>>flag;
if(flag==1)
TraverBiTree(BT,1); //先序遍历
else if(flag==2)
TraverBiTree(BT,2); //中序遍历
else if(flag==3)
TraverBiTree(BT,3); //后序遍历
else if(flag==4)
TraverBiTree(BT,4); //按层次遍历
else
cout<<"\nYou must select 1-4"<<endl;
break;
defualt:
cout<<"\nYou must select 1-2"<<endl;
break;
}
}
yinqing_yx 2006-03-29
  • 打赏
  • 举报
回复
介绍你方法 具体还是要自己做 因为太长了
字符的插入方法:C++实现(纯C我用不来了 呵呵)
template <class E, class K>
BSTree<E,K>& BSTree<E,K>::Insert(const E& e)
{
BinaryTreeNode<E> *p = root; *pp = 0;

while(p)
{
pp = p;
if(e < p->data)
{
p = p->LeftChild;
}
else if(e > p->data)
{
p = p->RightChild;
}
else
{
throw BadInput();
}
}

BinaryTreeNode<E> *r = new BinaryTreeNode<E>(e);
if(root)
{
if(e < pp->data)
{
pp->LeftChild = r;
}
else
{
pp->RightChild = r;
}
}
else
{
root = r;
}

return *this;
}
虽然是模板 但是应该能看懂吧 看看思路就行了~~~~~~~~~
bm1408 2006-03-29
  • 打赏
  • 举报
回复
唉~
http://student.zjzk.cn/course_ware/data_structure/web/DOWNLOAD/%CA%FD%BE%DD%BD%E1%B9%B9%D3%EB%CB%E3%B7%A82.htm
好好学习,天天向上~

70,034

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧