• 二叉树的学习记录


    1,创建二叉树根

    2,插入二叉树节点

    3,二叉树元素查找

    4,二叉树删除节点

    5,打印二叉树

    /*
    	
    */
    #include <stdlib.h>
    #include <stdio.h>
    
    #define TLEN (sizeof(struct num))
    
    typedef struct num
    {
    	int n;
    	struct num *Ltree;
    	struct num *Rtree;
    }*NumTree;
    
    /*
    	创建二叉树 
    */ 
    NumTree createNewTree(int n)
    {
    	NumTree T=(NumTree)malloc(sizeof(struct num));
    	if(T==NULL)
    	{
    		printf("内存申请失败
    ");
    		return NULL; 
    	}
    	T->n=n;
    	T->Ltree=NULL;
    	T->Rtree=NULL;
    	return T;
    }
    
    /*
    	插入节点 
    */ 
    NumTree insertElement(NumTree T,int n)
    {
    	if(T==NULL)
    	{
    		T=(NumTree)malloc(sizeof(struct num));	
    		if(T==NULL)
    		{
    			printf("申请内存失败
    ");
    		}
    		else
    		{
    			T->n=n; 
    			T->Ltree=T->Rtree=NULL;
    		}
    	}
    	else if(n<T->n)
    	{
    		T->Ltree=insertElement(T->Ltree,n);
    	}
    	else if(n>T->n)
    	{
    		T->Rtree=insertElement(T->Rtree,n);
    	}
    	return T;
    }
    
    /*
    	寻找节点 
    */
    NumTree findElement(NumTree T,int n)
    {
    	if(n<T->n)
    	{
    		return findElement(T->Ltree,n);		
    	}
    	else if(n>T->n)
    	{
    		return findElement(T->Rtree,n);
    	}
    	else
    	{
    		return T;
    	}
    }
    
    /*
    	找到最小项 
    */
    NumTree findMin(NumTree T)
    {
    	NumTree p=T->Ltree;
    	while(p!=NULL)
    	{
    		p=p->Ltree;
    	}	
    	return p;
    }
    /*
    	删除节点 
    */
    NumTree deleteElement(NumTree T,int n)
    {
    	NumTree t;
    	if(n<T->n)
    	{
    		T->Ltree=deleteElement(T->Ltree,n);
    	} 
    	else if(n>T->n)
    	{
    		T->Rtree=deleteElement(T->Rtree,n);
    	}
    	else if((T->Ltree!=NULL)&&(T->Rtree)!=NULL)
    	{
    		t=findMin(T->Rtree);
    		T->n=t->n;
    		T->Rtree=deleteElement(T->Ltree,T->n);
    	}
    	else
    	{
    		t=T;
    		if(T->Ltree==NULL)
    		{
    			T=T->Rtree;	
    		}
    		else if(T->Rtree==NULL)
    		{
    			T=T->Ltree;		
    		}
    		free(t);
    	}
    	return T;
    }
    
    /*
    	打印树 
    */
    void printfTree(NumTree T)
    {
    	if(T!=NULL)
    	{
    		printf("%d
    ",T->n);
    		printfTree(T->Ltree);
    		printfTree(T->Rtree);
    	}	
    }
    
    int main()
    {
    	NumTree T0;
    	T0=createNewTree(100);
    	insertElement(T0,80);	
    	insertElement(T0,120);	
    	insertElement(T0,90);	
    	insertElement(T0,110);
    	printfTree(T0);
    	deleteElement(T0,80);
    	printfTree(T0);
    }
    

      

  • 相关阅读:
    8.1.3 CSS3选择器 —— 伪类
    8.1.2 CSS3选择器 —— 结构性伪类
    VI打开和编辑多个文件的命令
    vi全局替换方法
    更改Ubuntu 12.04默认的shel
    如何区分直连串口线和交叉串口线?
    [转]OpenWrt的dl下载地址
    关闭 ubuntu System program problem detected
    linuxC学习
    aa
  • 原文地址:https://www.cnblogs.com/achao123456/p/6349428.html
Copyright © 2020-2023  润新知