Trợ giúp cây nhị phân dùng danh sách liên kết

#include<iostream>
#include<stdlib.h>
#include<fstream>
using namespace std;

typedef struct node{
int item;
struct node *left;
struct node *right;
}tree_node;
tree_node root;

int check_null(tree_node *root){
    if(root==NULL)
    return 1;
    return 0;

}
tree_node *creat_node(int x){
    tree_node *p;
    p=new node;
    p->item=x;
    p->left=p->right=NULL;
    return p;
    }
tree_node *insert_node(tree_node *root , int x)
{
   tree_node *p,*r; 
   p=creat_node(x) ;

   if(root == NULL)
   {
      root = p;
   }
   else
   {
    r=root;
      while(root!=NULL)
      {
         if(x < root ->item)
         {
         	
            root = root->left;
         }
         else
	      if (x >root ->item)
         {
            root = root->right;
         }
   }
   
   if(x<r->item)
   r->left=p;
   else
   if(x>r->item)
   r->right=p;
   return p;
}
}

void in_put(tree_node *root){
 int x;
 ifstream f;
 f.open("test.txt");
 while(!f.eof()){
 	f>>x;
       insert_node(root,x) ;
    } 
    
}
void PreOrder(tree_node *root)
{
	
   if(root!=NULL)
   {
      cout<<root->item;
      PreOrder(root->left);
      PreOrder(root->right);
   }
}
void InOrder(tree_node *root)
{
   if(root!=NULL)
   {
     InOrder(root->left);
    cout<<root->item;
      InOrder(root->right);
   }
}
void PostOrder(tree_node *root)
{
   if(root!=NULL)
   {
      PostOrder(root->left);
      PostOrder(root->right);
      cout<<root->item;
   }
}
main(){
tree_node *root;
root=new node;
root->left=root->right=NULL;
in_put(root);
PreOrder(root);
InOrder(root);
PostOrder(root);
}

mình chạy nó không hiển thị ra số mà hiển thị ra địa chỉ là sao nhỉ?

Hồi trước mình có làm cái class về Binary search tree, bạn có thể coi để tham khảo phần print_tree.
Còn mấy cái convert Infix to postFix gì đó bị lỗi, bạn đừng quan tâm.

cảm ơn bạn đã share.mình sẽ tham khảo.mong các bạn sửa bài code dùm mình vì bài code do chính tay mình viết thì mình sẽ hiểu hơn và nhớ lâu hơn

  • Hàm check_null không để làm gì?
  • Hàm tree_insert root thay đổi, phần insert khi root!=NULL bị sai: sửa lại
tree_node *insert_node(tree_node *&root , int x) // &root là root có thể thay đổi khi = NULL
{
   tree_node *p,*r; 
   p=creat_node(x) ;

   if(root == NULL)
   {
      root = p;
   }
   else
   {
        r=root;
           for(;;){
               //cout<<r->item<<endl;
               if(x<r->item){
                   if(r->left){
                       r=r->left;
                   }else{
                       r->left=p;
                       return p;
                   }
               }else{
                   if(r->right){
                       r=r->right;
                   }else{
                       r->right=p;
                       return p;
                   }
               }
               
           }
    }
}
  • và chuyển in_put(tree_node * root) => in_put(tree *& root)
  • chỉ cần thay bằng tree_node * root=NULL;
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?