急求

jipinglove 2008-12-30 04:54:20
我现在要做一个 用C++实现的二叉树绘制,需要源代码!请朋友们帮忙,我马上要交了!谢谢!
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lsd1025 2008-12-31
  • 打赏
  • 举报
回复
很感谢你们!没想到这么快阿!呵呵!
嘿嘿!难道楼主不打算这么快结贴?
jipinglove 2008-12-31
  • 打赏
  • 举报
回复
很感谢你们!没想到这么快阿!呵呵!
jipinglove 2008-12-31
  • 打赏
  • 举报
回复
非常感谢您!呵呵!
yupengt 2008-12-30
  • 打赏
  • 举报
回复
学习学习
elegant87 2008-12-30
  • 打赏
  • 举报
回复

//这个是二叉排序树

#ifndef BINARY_TREE_H
#define BINARY_TREE_H

template <class TreeElem>
class BinaryTree
{
public:
BinaryTree();
bool Insert(const TreeElem& t);
bool Search(const TreeElem& t);
void Display() const;
~BinaryTree();
private:
struct treenode
{
TreeElem info;
struct treenode *lchild;
struct treenode *rchild;
};
treenode *root;
bool Insert(treenode *&aroot,const TreeElem &t);
bool Search(treenode *&aroot,const TreeElem &t);
void Display(treenode *aroot) const;

};

#endif


#include "binarytree.h"
#include <iostream>
using namespace std;

template <class TreeElem>
BinaryTree<TreeElem>::BinaryTree():root(NULL){}

template <class TreeElem>
bool BinaryTree<TreeElem>::Insert(const TreeElem &t)
{
return Insert(root,t);
}

template <class TreeElem>
bool BinaryTree<TreeElem>::Insert(treenode *&aroot,const TreeElem &t)
{
if(aroot==NULL)
{
aroot=new treenode; //建立根节点
aroot->lchild=NULL; //左子树为空
aroot->rchild=NULL; //右子树为空
aroot->info=t;
return true;
}
else
if(aroot->info==t)
return false;
else
if(aroot->info > t)
return Insert(aroot->lchild,t);
else
return Insert(aroot->rchild,t);
}

template <class TreeElem>
bool BinaryTree<TreeElem>::Search(const TreeElem &t)
{
return Search(root,t);
}

template <class TreeElem>
bool BinaryTree<TreeElem>::Search(treenode *&aroot,const TreeElem &t)
{
if(aroot==NULL)
return false;
else
{
if(aroot->info==t)
return true;
else
if(aroot->info>t) //从左子树中查找
return Search(aroot->lchild,t);
else //从右子树中查找
return Search(aroot->rchild,t);
}
}

template <class TreeElem>
void BinaryTree<TreeElem>::Display() const
{
Display(root);
}

template <class TreeElem>
void BinaryTree<TreeElem>::Display(treenode *aroot) const
{
if(aroot!=NULL)
{
Display(aroot->lchild);
cout<<aroot->info<<" ";
Display(aroot->rchild);
}
}

template <class TreeElem>
BinaryTree<TreeElem>::~BinaryTree(){ }


#include "binarytree.cpp"
#include <iostream>
using namespace std;

int main()
{
BinaryTree<int> Bint;
int ival;
bool flag;
int a[]={2,6,9,8,12,11,23,56};
for(int i=0;i!=sizeof(a)/sizeof(int);++i)
Bint.Insert(a[i]);
Bint.Display();
cout<<"\n请输入查找的值: ";
cin>>ival;
flag=Bint.Search(ival);
if(flag)
cout<<"查找成功!"<<endl;
else
cout<<"查找失败!"<<endl;
cout<<endl;
return 0;
}
elegant87 2008-12-30
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

typedef int TElemType;

typedef struct BiTNode
{
TElemType data;
struct BiTNode *lchild;
struct BiTNode *rchild;
}BiTNode,*BiTree;


void InitBiTree(BiTree &T)
{
T=NULL;
}

void InsertBiTNode(BiTree &T,TElemType e) //插入节点
{
if(T==NULL)
{
T=(BiTree)malloc(sizeof(BiTNode));
T->lchild=NULL;
T->rchild=NULL;
T->data=e;
}
else
if(T->data>e)
InsertBiTNode(T->lchild,e);
else
InsertBiTNode(T->rchild,e);
}

void CreateBiTree(BiTree &T)
{
int ival;
printf("请输入数值(-1 to quit): ");
scanf("%d",&ival);
while(ival!=-1)
{
InsertBiTNode(T,ival);
scanf("%d",&ival);
}
}

void DestroyBiTree(BiTree &T) //销毁二叉树
{
return 1;
}

bool BiTreeEmpty(BiTree T) //判断二叉树是否为空
{
if(T==NULL)
return true;
else
return false;
}

BiTNode* Root(BiTree T) //返回树的根节点
{
return T;
}

void PreOrderTravese(BiTree &T) //先序遍历
{
if(T)
{
printf("%d ",T->data);
PreOrderTravese(T->lchild);
PreOrderTravese(T->rchild);
}
}

void InOrderTraverse(BiTree &T) //中跟遍历
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%d ",T->data);
InOrderTraverse(T->rchild);
}
}

void PostOrdetTraverse(BiTree &T) //后序遍历
{
if(T)
{
PostOrdetTraverse(T->lchild);
PostOrdetTraverse(T->rchild);
printf("%d ",T->data);
}

}

void LevelOrderTraverse(BiTree &T) //层序遍历
{

}
//层次遍历就是按二叉树的每一层的顺序来遍历,
//也就是先访问根结果,然后访问第一层,接着访问第二层...

void main()
{
BiTree root;
InitBiTree(root);
printf("\t\t创建二叉树!\n");
CreateBiTree(root);
if(!BiTreeEmpty(root))
{
printf("\n----------前序遍历------------\n");
PreOrderTravese(root);
printf("\n----------中序遍历------------\n");
InOrderTraverse(root);
printf("\n----------后序遍历------------\n");
PostOrdetTraverse(root);
printf("\n");

}
else
printf("树为空树!\n");
system("PAUSE");
}



Somnus 2008-12-30
  • 打赏
  • 举报
回复
结贴率好可怕!

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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