C++ 二叉树类的实现

C++ 二叉树类的实现,c++,algorithm,binary-tree,C++,Algorithm,Binary Tree,我有以下代码。它创建了一个二叉树类。函数有insert()、pre_order()、post_order()、in_order()。但当我调试它时,我得到了零值。我还插入了9个值,但只有7个零。我为什么做错了 #include <iostream> using namespace std; //Begin the construction of the BINARY TREE struct tree_node { tree_node *left; tree_node *r

我有以下代码。它创建了一个二叉树类。函数有insert()、pre_order()、post_order()、in_order()。但当我调试它时,我得到了零值。我还插入了9个值,但只有7个零。我为什么做错了

#include <iostream>

using namespace std;

//Begin the construction of the BINARY TREE
struct tree_node {
  tree_node *left;
  tree_node *right;
  int data;
};

//Declaring the class
class bst {
  tree_node *root; //creating the root of the binary tree

  public:
    bst() {
      root = NULL; //intialize the default construction, set the root to NULL
    }

    int is_empty() { //check for empty graph
      return (root == NULL);
    }

    //Manipulating the Binary Tree
    void insert(int item);
    void remove_it(int value); //difficult implementation

    //Graph Traversal of Binary Tree
    void in_order_trav();
    void in_order(tree_node *);
    void pre_order_trav();
    void pre_order(tree_node *);
    void post_order_trav();
    void post_order(tree_node *);
};

void bst::insert(int item) {
  tree_node *p = new tree_node;
  tree_node *parent;
  p->left = NULL;
  p->right = NULL;
  parent = NULL;

  if (is_empty()) {
    root = p;
  }
  else {
    tree_node *ptr;
    ptr = root;

    while (ptr != NULL) {
      parent = ptr;

      if (item > ptr->data)
        ptr = ptr->right;
      else
        ptr = ptr->left;
    }

    if (item < parent->data) 
      parent->left = p;
    else
      parent->right = p;
  }
}
/*************In Order Traversal*****************************/
// Begin
void bst::in_order_trav() {
  in_order(root);
}

void bst::in_order(tree_node *ptr) {
  if (ptr!=NULL) {
    in_order(ptr->left);
    cout << " " << ptr->data << "     ";
    in_order(ptr->right);
  }
}
// End
/***********************************************************/

/*************Pre Order Traversal*****************************/
// Begin
void bst::pre_order_trav() {
  pre_order(root);
}

void bst::pre_order(tree_node *ptr) {
  if (ptr!=NULL) {
    cout << "  " << ptr->data << "     ";
    pre_order(ptr->left);
    pre_order(ptr->right);
  }
}
// End
/***********************************************************/

/*************Post Order Traversal*****************************/
// Begin
void bst::post_order_trav() {
  post_order(root);
}

void bst::post_order(tree_node *ptr) {
  if(ptr!=NULL) {
    post_order(ptr->left);
    post_order(ptr->right);
    cout << "  " << ptr->data << "     ";
  }
}
// End
/***********************************************************/

int main() {
  bst bin_tree; //create the Binary Tree
  bin_tree.insert(20);
  bin_tree.insert(30); 
  bin_tree.insert(52);  
  bin_tree.insert(254); 
  bin_tree.insert(2); 
  bin_tree.insert(24); 
  bin_tree.insert(25); 
  bin_tree.insert(42); 
  bin_tree.insert(59); 
  bin_tree.in_order_trav(); //in order traversal
  bin_tree.pre_order_trav(); //pre order traversal
  bin_tree.post_order_trav(); //post order traversal
}
#包括
使用名称空间std;
//开始构建二叉树
结构树节点{
树节点*左;
树节点*右;
int数据;
};
//声明类
bst级{
tree_node*root;//创建二叉树的根
公众:
bst(){
root=NULL;//初始化默认构造,将根设置为NULL
}
int是_empty(){//检查空图
返回(root==NULL);
}
//操纵二叉树
无效插入(整数项);
void remove_it(int值);//实现困难
//二叉树的图遍历
按顺序无效;
按顺序无效(树节点*);
作废预订单();
作废预订单(树节点*);
无效邮购单();
作废后订单(树节点*);
};
void bst::insert(int项){
树节点*p=新树节点;
树节点*父节点;
p->left=NULL;
p->right=NULL;
parent=NULL;
如果(是空的()){
根=p;
}
否则{
树节点*ptr;
ptr=根;
while(ptr!=NULL){
父母=ptr;
如果(项目>ptr->数据)
ptr=ptr->右侧;
其他的
ptr=ptr->左;
}
如果(项<父项->数据)
父->左=p;
其他的
父->右=p;
}
}
/*************顺序遍历*****************************/
//开始
void bst::按顺序排列{
按顺序(根);
}
void bst::按顺序(树节点*ptr){
如果(ptr!=NULL){
按顺序(ptr->左);
不能离开);
邮政订单(ptr->右侧);

cout应该在函数insert()处初始化节点值(p->data=item),如下所示


好吧,这个解决方案很愚蠢-

我忘了在插入例程中添加那一行

p->data = item;

提示-查看
项目
插入
@Dukeling中的使用位置,这是唯一的问题还是我在其他地方遇到的问题?谢谢你的回复,我没有看到!你似乎从未在insert@KABoissonneault我做到了。我应该回答我自己的问题吗?@geogegkas如果你的问题解决了,当然
p->data = item;