返回信息流莫名其妙出现了这个错误:
百度了之后各种不明白,网上的各种解决方法均无效。。
刚刚接触数据结构伤不起啊~~还求版上高人相助啊~~
#include "stdafx.h"
#include<iostream>
using namespace std;
template<class T>
struct BiNode{
T data;
BiNode<T>*lchild;
BiNode<T>*rchild;
};
template<class T>
class BiTree{
public:
BiNode<T>*root;
BiTree(T data[]);
void PreOrder(BiNode<T>*R);
void InOrder(BiNode<T>*R);
void PostOrder(BiNode<T>*R);
void LevelOrder(BiNode<T>*R);
int Count(BiNode<T>*R);
int GetDepth(int m);
void Route(BiNode<T>*R,int m,T data[]);
~BiTree();
private:
void Creat(BiNode<T>* &R,T data[],int i);
void Release(BiNode<T>*R);
};
template<class T>
void BiTree<T>::Creat(BiNode<T>* &R,T data[],int i){
if(data[i-1]!=0){
R=new Node<T>;
R->data=data[i-1];
Creat(R->lchild,data,2*i);
Creat(R->rchild,data,2*i+1);
}
else{
R=NULL;
}
}
template<class T>
void BiTree<T>::PreOrder(BiNode<T>*R){//前序遍历
if(R!=NULL){
cout<<R->data;
PreOrder(R->lchild);
PreOrder(R->rchild);
}
}
template<class T>
void BiTree<T>::InOrder(BiNode<T>*R){//中序遍历
if(R!=NULL){
InOrder(R->lchild);
cout<<R->data;
InOrder(R->rchild);
}
}
template<class T>
void BiTree<T>::PostOrder(BiNode<T>*R){//后序遍历
if(R!=NULL){
PostOrder(R->lchild);
PostOrder(R->rchild);
cout<<R->data;
}
}
template<class T>
void BiTree<T>::LevelOrder(BiNode<T>*R){//层序遍历
BiNode<T>*queue[1000];
int f=0,r=0;
if(R!=NULL){
queue[++r]=R;
}
while(f!=r){
BiNode<T>*p=queue[++f];
cout<<p->data;
if(p->lchild!=NULL){
queue[++r]=p->lchild;
}
if(p->rchild!=NULL){
queue[++r]=p->rchild;
}
}
}
template<class T>
void BiTree<T>::Release(BiNode<T>*R){//释放二叉树
if(R!=NULL){
Release(R->lchild);
Release(R->rchild);
delete R;
}
}
template<class T>
BiTree<T>::~BiTree(){//析构
Release(root);
}
template<class T>
int BiTree<T>::Count(BiNode<T>*R){//结点总数
if(R==NULL){
return 0;
}
else{
int m=Count(R->lchild);
int n=Count(R->rchild);
return m+n+1;
}
}
template<class T>
int BiTree<T>::GetDepth(int m){//深度
int d=1;
for(;;){
int n=1;
for(int i=0;i<d;i++){
n=n*2;
}
if(m>n-1){
d=d+1;
}
}
return d;
}
template<class T>
void BiTree<T>::Route(BiNode<T>*R,int m,T data[]){//路径
for(int i=0;i<m;i++){
if(data[i]==R->data){
cout<<R->data;
}
}
for(int i=0;i<m;i++){
if(data[i]==R->lchild->data ||data[i]==R->rchild->data){
R->data=data[i];
Route(R,m,data);
}
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char tree[]={'A','B','C','D','E','G',0,0,0,'F',0,0,0};
BiTree<char> bitree(tree);
int m=bitree.Count(bitree.root);
bitree.PreOrder(bitree.root);
bitree.InOrder(bitree.root);
bitree.PostOrder(bitree.root);
bitree.LevelOrder(bitree.root);
bitree.GetDepth(m);
bitree.Route(bitree.root,m,tree);
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #75262同步于 2013/11/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
【求高人指点~~】LNK2019:无法解析的外部符号
cptbtptp29
2013/11/19镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
你在声明里不是声明了这个函数么……BiTree<T>::BiTree(T data[]),然后应该有对应的定义……就像你的BiTree::~BiTree()的定义一样