任务是给定一个char型数组,元素'0'代表空结点。
要求用树的构造函数将数组写入二叉树中,我的想法是新建一个左结点和右结点,利用循环将数组中的元素一一写入二叉树中,但是在调用两个结点时遇到了写入权限访问的原因,源代码如下:
class Tree{
private:
TreeNode* root;
public:
Tree(char *array, int arrayLength);
TreeNode* GetRoot() {return root;}
void PreTraversal(TreeNode* root);
void InTraversal(TreeNode* root);
void PostTraversal(TreeNode* root);
int TreeHight(TreeNode* root);
void LevelTraversal();
};
class TreeNode{
public:
int data;
TreeNode* left;
TreeNode* right;
TreeNode(char x): data(x), left(NULL), right(NULL){}
};
Tree::Tree(char* array, int arrayLength){
//Fill the code here.
if (arrayLength == 0)
return;
TreeNode* root = new TreeNode(NULL);
root->data = array[0];
TreeNode* leftnode = new TreeNode('0');
TreeNode* rightnode = new TreeNode('0');
root->left = leftnode;
root->right = rightnode;
for (int i = 0; i <= arrayLength; i *= 2)
{
if (array[i + 1] == '0')
leftnode = NULL;
else
{
leftnode->data = array[i + 1];
leftnode = leftnode->left;
}
if (array[i + 2] == '0')
rightnode = NULL;
else
{
rightnode->data = array[i + 2];
rightnode = rightnode->right;
}
}
}
/**Pre-order traverse the constructed tree. The pointer to tree root is "root".*/
void Tree::PreTraversal(TreeNode* root){
//Fill the code here.
if (root)
{
cout << root->data;
PreTraversal(root->left);
PreTraversal(root->right);
}
}
int main(int argc, char** argv) {
//Construct the tree using each character in the array. You may change the input array.
char array[] = "123456";
int ArrayLength = sizeof(array)/sizeof(char);
cout << "array length is: " << ArrayLength << endl;
//The last character is "\0" which should not be counted in arrayLength.
Tree* t = new Tree(array, ArrayLength-1);
cout << "Level construct of the tree is complete." << endl;
cout << "Pre-order Traversal: ";
t->PreTraversal(t->GetRoot());
return 0;
}