自己用类实现的时候,发现每次插入后...新值插入,root(命名为TREE)又变成了空指针...
所以遍历的时候直接返回了
求问怎么改动... 主要问题应该在Insert_Node
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
//define the Binary Search Tree class
class BSearch_Tree {
public:
int key;
BSearch_Tree *left;
BSearch_Tree *right;
BSearch_Tree *parent;
BSearch_Tree():left(nullptr),right(nullptr),parent(nullptr){}
//拷贝构造函数
BSearch_Tree(const BSearch_Tree& T);
BSearch_Tree& operator=(const BSearch_Tree& T);
~BSearch_Tree();
};
BSearch_Tree::BSearch_Tree(const BSearch_Tree& T) {
key = T.key;
if(left==nullptr){ left = new BSearch_Tree(); *left = *T.left;}
else *left = *T.left;;
if (right == nullptr) { right = new BSearch_Tree(); *right = *T.right; }
else *right = *T.right;
if (parent == nullptr) { parent = new BSearch_Tree(); *parent = *T.parent; }
else *parent = *T.parent;
}
BSearch_Tree& BSearch_Tree::operator=(const BSearch_Tree& T) {
key = T.key;
if (left == nullptr) { left = new BSearch_Tree(); *left = *T.left; }
else *left = *T.left;;
if (right == nullptr) { right = new BSearch_Tree(); *right = *T.right; }
else *right = *T.right;
if (parent == nullptr) { parent = new BSearch_Tree(); *parent = *T.parent; }
else *parent = *T.parent;
return *this;
}
BSearch_Tree::~BSearch_Tree() {
delete left; left = nullptr;
delete right; right = nullptr;
delete parent; parent = nullptr;
}
//The operations of BSearch_Tree
//Include : Insert the node , search the node , delete the node , print the tree
void Insert_Node(BSearch_Tree* T, int key) {
BSearch_Tree *y=new BSearch_Tree(),*z=new BSearch_Tree();
BSearch_Tree* x = T;
z->key = key;
if (!x ) { T = z; cout << T->key; return; } //每次都x==nulptr?????
while (x !=nullptr ) {
y = x; //set y as parent
x = (z->key <= x->key) ? x->left : x->right;
}
z->parent = y;
if (z->key < y->key)y->left = z;
else y->right = z;
}
void Print_Tree(const BSearch_Tree *T) {
if (!T) return;
cout << T->key << ' ';
Print_Tree(T->left);
Print_Tree(T->right);
}
int main() {
cout << "Input the number of cmds \n"
<< "Formatted as : \"Insert \'key\' \"\n or \"Search \'key\' \"\n or"
<<" \"Delete \'key\' \"\n or"
<<" \"Print\" "
<< endl;
BSearch_Tree* TREE=nullptr;
int node_nums, key;
string cmd;
cin >> node_nums;
for (int i = 0; i < node_nums; ++i) {
cin >> cmd;
if (cmd == "Insert") {
cin >> key;
Insert_Node(TREE, key);
}
else if (cmd == "Print") {
cout << "Printed by inordered :\n";
Print_Tree(TREE);
}
}
return 0;
}