30/09/2018, 16:47

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);
}
Khai Nguyen Dinh viết 19:01 ngày 30/09/2018

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

... viết 18:49 ngày 30/09/2018

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.

Em có làm 1 class Expression trong đó chứa các trường như sau: string inFix; string preFix; string postFix; node* tree; Em gặp vấn đề trong method convert_to_tree() từ biểu thức inFix. Em làm theo hướng dẫn ở trang này: http://yinyangit.wordpress.com/2011/01/28/algorithm-t%E1%BA%A1o-va-su-dung-cay-bi%E1%BB%83u-th%E1%BB%A9c-expression-tree/ và đây là link down file em làm: http://www.mediafire.com/download/1hcqx51879zp14d/Expression+C++.rar Mọi người ai rãnh thì xem h…
Khai Nguyen Dinh viết 18:52 ngày 30/09/2018

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

Gió viết 18:48 ngày 30/09/2018
int check_null(tree_node *root){
    if(root==NULL)
    return 1;
    return 0;

}

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;
}
}

  • 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)
tree_node *root;
root=new node;
root->left=root->right=NULL;
  • chỉ cần thay bằng tree_node * root=NULL;
Bài liên quan
0