在测试了 insert 函数以及 swapSubTrees 和 printTree 函数之后,我终于让我的所有函数都可以工作了。现在我需要从一个文件创建一个二叉树,然后我让文件打开并读取文件的第一个整数,但是我的程序崩溃了。
有很多代码,我不想做一堵代码墙。我会发布我的重要部分,如果需要,我会提供其余的代码。
我的交换和打印功能是:
template<class elemType>
void bSearchTreeType<elemType>::printTree()
{
printTree(root);
}
template<class elemType>
void bSearchTreeType<elemType>::printTree(nodeType<elemType> *p)
{
if(p != NULL)
cout << p->info << endl;
printTree(p->lLink);
printTree(p->rLink);
}
template<class elemType>
void bSearchTreeType<elemType>::swapSubtrees(nodeType<elemType> * p)
{
if (p != NULL)
{
if (p->lLink != NULL && p->rLink != NULL)
{
nodeType<elemType> * temp = p->lLink;
p->lLink = p->rLink;
p->rLink = temp;
delete temp;
}
if (p->lLink != NULL && p->rLink == NULL)
{
swapSubtrees(p->lLink);
}
if (p->rLink != NULL && p->lLink == NULL)
{
swapSubtrees(p->rLink);
}
}
}
我的主要程序是:
#include<iostream>
#include<fstream>
#include<cstdlib>
#include "binarySearchTree.h"
using namespace std;
int main()
{
bSearchTreeType<int>bt;
ifstream infile;
infile.open("binaryTree.txt");
if(!infile){
cout<<"File not found"<<endl;
}
int tree;
while(infile>> tree)
{
bt.insert(tree);
}
bt.swapSubtrees();
bt.printTree();
bt.swapSubtrees();
system("PAUSE");
return 0;
}
程序完全编译运行,开始打印从12开始的列表:
这是 binaryTree.txt 的内容:12 23 56 45 78 89 98 25 36 65 54
我有点困惑为什么它总是崩溃。有什么想法吗?当我手动构建列表时,程序不稳定。打印最后一项后,程序将挂起。现在它在尝试打印时挂起。我认为这是功能的问题。
非常感激