⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rtbtlib.c

📁 right threaded binary tree
💻 C
字号:
/*threaded binary tree*/
#include<stdio.h>
#include<conio.h>
#include<alloc.h>

typedef struct nodetype
{
  int info;
  char thread;
  struct nodetype *left,*right;
}node;

void create(node **root)
{
  *root=NULL;
}

void insert(node **root,int ele)
{
	node *temp,*curr,*par;
	temp=(node *) malloc(sizeof(node));
	temp->info=ele;
	temp->left=NULL;
	if(*root==NULL)
	{
		*root=temp;
		temp->right=NULL;
		temp->thread='0';
	}
	else
	{
		par=NULL;
		curr=*root;
		while(curr!=NULL)
		{
			par=curr;
			if(ele<curr->info)
			   curr = curr->left;
			else
			 {
			   if(curr->thread=='1')
			     curr=NULL;
			   else
			     curr = curr->right;
			 }
		 }
		 if(ele<par->info)
		 {
			par->left=temp;
			temp->right=par;
			temp->thread='1';
		 }
		 else
		 {
			if(par->thread=='1')
			{
				par->thread='0';
				temp->thread='1';
				temp->right=par->right;
				par->right=temp;
			 }
			 else
			 {
			   if(par->thread=='1')
			   {
				temp->thread='\0';
				temp->thread='1';
				temp->right=par->right;
				par->right=temp;
			    }
			    else
			    {
				par->thread='0';
				temp->right=NULL;
				par->right=temp;
			    }
			  }
	      }
      }
}

void inorder(node *root)
{
  node *temp,*temp1;
  temp=root;
  do
  {
    temp1=NULL;
    while(temp!=NULL)
    {
      temp1=temp;
      temp=temp->left;
    }
    if(temp1!=NULL)
    {
      printf("%d\t",temp1->info);
      temp=temp1->right;
      while(temp1->thread=='1' && temp!=NULL)
      {
	printf("%d\t",temp->info);
	temp1=temp;
	temp=temp->right;
      }
    }
  }
  while(temp!=NULL);
  printf("\n");
}

int large(node *root)
{
  if(root->right==NULL)
    return(root->info);
  else
    return(large(root->right));
}

int small(node *root)
{
  if(root->left==NULL)
    return(root->info);
  else
    return(small(root->left));
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -