#include<iostream>
using namespace std;
struct BinTreeNode{
char data;
BinTreeNode *leftChild, *rightChild;
BinTreeNode(){leftChild = NULL; rightChild = NULL; }
BinTreeNode(char x, BinTreeNode *l, BinTreeNode *r){ data = x; leftChild = l; rightChild = r; }
};
class BinaryTree{
protected:
BinTreeNode *root;
public:
BinTreeNode* CreateBinTree(char valueArray[], BinTreeNode *subTree);
void preOrder(BinTreeNode *root);
void preOrderNonrecursion(BinTreeNode *root);
void inOrder(BinTreeNode *root);
void inOrderNonrecursion(BinTreeNode *root);
void postOrder(BinTreeNode *root);
void postOrderNonrecursion(BinTreeNode *root);
void getHeight(BinaryTree *root);
BinTreeNode* getRoot(){ return root;}
int treeSize(BinTreeNode *root);
};
BinTreeNode* BinaryTree::CreateBinTree(char valueArray[],BinTreeNode *subTree){
static int num = -1;
BinTreeNode *p = new BinTreeNode();
if (num < sizeof(valueArray))
{
p->data = valueArray[++num];
CreateBinTree(valueArray,p->leftChild);
CreateBinTree(valueArray,p->rightChild);
}
return p;
}
void BinaryTree::preOrder(BinTreeNode *p){
if (p != NULL){
cout << p->data;
preOrder(p->leftChild);
preOrder(p->rightChild);
}
}
int main(){
char valueArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
BinaryTree a;
a.preOrder(a.CreateBinTree(valueArray,a.getRoot()));
return 0;
}
就运行以后什么东西都没有出来,直接提示“按任意键结束”
前序遍历输出的函数是书上的,不可能错,如果正常运行应该会有输出的
所以建二叉树的函数有问题,但我感觉逻辑上没什么问题呀,请大神帮忙指点迷津
1、获取数组长度不对
2、建立树的时候,因为是root是指针参数传递,所以要用双重指针
3、CreateBinTree函数既然返回P 却没有承接对象
#include
using namespace std;
struct BinTreeNode{
int data;
BinTreeNode *leftChild, *rightChild;
BinTreeNode(){leftChild = NULL; rightChild = NULL; }
BinTreeNode(char x, BinTreeNode *l, BinTreeNode *r){ data = x; leftChild = l; rightChild = r; }
};
class BinaryTree{
protected:
BinTreeNode root;
public:
void CreateBinTree(char valueArray[], BinTreeNode **subTree);
void preOrder(BinTreeNode *root);
void preOrderNonrecursion(BinTreeNode *root);
void inOrder(BinTreeNode *root);
void inOrderNonrecursion(BinTreeNode *root);
void postOrder(BinTreeNode *root);
void postOrderNonrecursion(BinTreeNode *root);
void getHeight(BinaryTree *root);
BinTreeNode getRoot(){ return root;}
int treeSize(BinTreeNode *root);
};
void BinaryTree::CreateBinTree(char valueArray[],BinTreeNode **subTree){
static int num =0;
if (num < 10)
{ *subTree = new BinTreeNode();
(*subTree)->data = valueArray[num];
num++;
CreateBinTree(valueArray,&((*subTree)->leftChild));
CreateBinTree(valueArray,&((*subTree)->rightChild));
}
//return *subTree;
}
void BinaryTree::preOrder(BinTreeNode *p){
if (p != NULL){
cout << p->data;
preOrder(p->leftChild);
preOrder(p->rightChild);
}
}
int main(){
char valueArray[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
BinaryTree a;
BinTreeNode * root = a.getRoot();
a.CreateBinTree(valueArray, &root);
a.preOrder(root);
getchar();
return 0;
}
https://zhidao.baidu.com/question/429463200.html
楼主参考这个吧
http://blog.csdn.net/xyzbaihaiping/article/details/51202719
http://blog.csdn.net/xyzbaihaiping/article/details/51202719
http://blog.csdn.net/xyzbaihaiping/article/details/51202719 来一发这个 看下
这种程序建议去网上找个源码先看看,不要一上来就自己写。
可以去参考一下严蔚敏的数据结构还是比较权威的