当前位置 博文首页 > ice_elephant的博客:数据结构算法之二叉查找树

    ice_elephant的博客:数据结构算法之二叉查找树

    作者:[db:作者] 时间:2021-09-16 15:48

    家谱:又称族谱、宗谱等。是一种以表谱形式,记载一个家族的世系繁衍及重要人物事迹的书。家谱是一 种特殊的文献,就其内容而言,是中华文明史中具有平民特色的文献,记载的是同宗共祖血缘集团世系人物和 事迹等方面情况的历史图籍

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    树状图是一种数据结构,它是由 n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点: 每个结点有零个或多个子结点;没有父结点的结点称为根结点;每一个非根结点有且只有一个父结点;除 了根结点外,每个子结点可以分为多个不相交的子树;

    二叉树在数据结构— 又称二叉查找树、二叉排序树(Binary Sort Tree)。它是一颗空树或是满足下列性质的二叉树: 1)若左子树不空,则左子树上所有节点的值均小于或等于它的根节点的值; 2)若右子树不空,则右子树上所有节点的值均大于或等于它的根节点的值; 3)左、右子树也分别为二叉排序树。在这里插入图片描述

    二叉树的前序遍历 通过递归的方法实现,

    typedef struct _Bnode{
    ElemType date;//注释ElemType我们在前面声明为int类型,
    _Bnode *lchild,*rchild;
    }Bnode,Btree;
    树就是这么一个结构形式,一棵根树,一棵左子树,然后一棵右子树

    前序遍历(递归方式):
    void printFront(Btree *root){
    
    if(!root) return ;
    printf("-%d-",root->date);
    printFront(root->lchild);
    printFront(root->rchild);
    

    }
    //中序递归函数
    void printFront(Btree *root){

    if(!root) return ;
    printFront(root->lchild);
    printf("-%d-",root->date);
    printFront(root->rchild);
    

    }
    //后序递归函数
    void printFront(Btree *root){

    if(!root) return ;
    printFront(root->lchild);
    printFront(root->rchild);
    printf("-%d-",root->date);
    

    }

    /* 前序递归函数刨析
    为什么叫前序遍历呢,从这个函数的实现上来看就是把printf这个打印的函数,放在 printFront(root->lchild)和printFront(root->rchild)的前面,这么放带来的影响就是,每次只要递归函数进来就直接打印进来的递归函数,它的遍历顺序就是"根左右"

    #pragma once
    #include<stdio.h>
    
    #define MAX_SIZE 1024
    #define isLess(a,b) (a<b)
    #define isEqual(a,b) (a==b)
    
    
    typedef int ElemType;
    
    typedef struct _Bnode{
    
    	ElemType date;
    	_Bnode *lchild,*rchild;
    
    
    }Bnode,Btree;
    //数据结构算法之二叉树,二叉树就是分成两叉的树
    //
    typedef  Bnode Elemdate;
    
    typedef struct _Stack{
    	Elemdate *base;
    	Elemdate *top;
    
    }Stack;
    
    
    //栈的初始化
    bool initStack(Stack &stack){
    	
       stack.base = new Elemdate[MAX_SIZE];
    
       if(!stack.base){
    
    	printf("栈初始化失败!\n");
    	return false;
    
       }
    
       stack.top = stack.base;
       return true;
    
    }
    
    //获取栈顶元素
    Elemdate* getTop(Stack &stack){
    	return stack.top-1;
    }
    //入栈
    bool PushStack(Stack &stack,Elemdate date){
    
    	if(stack.top-stack.base==MAX_SIZE){
    		
    		printf("栈空间已满,入栈失败!\n");
    		return false;
    	}
    
    	*(stack.top++) = date;
    	return true;
    
    }
    
    //出栈
    bool PopStack(Stack &stack,Elemdate &date){
    	if(stack.base==stack.top){
    		printf("无元素可出栈!\n");
    		return false;
    	}
    	
    
    	date = *(--stack.top);
    	return true;
    
    	}
    
    //判断栈是否为空
    bool isEmpty(Stack&stack){
    	if(stack.base==stack.top){
    		return true;
    
    	}
    
    	return false;
    }
    //判断栈是否已满
    bool isFully(Stack &stack){
    
    	if(stack.top-stack.base==MAX_SIZE){
    		
    		return true;
    	}	
    	return false;
    }
    
    //销毁栈
    void destoyedStack(Stack &stack){
    	
    	if(!&stack) return;
    
    	delete [MAX_SIZE] stack.base;
    
    	stack.base = stack.top = NULL;
    
    
    }
    
    //获取以元素个数
    int getElemdateCount(Stack &stack){
    	
    
    	return (stack.top-stack.base);
    }
     
    
    #pragma once
    #include<stdio.h>
    
    #define MAX_SIZE 1024
    #define isLess(a,b) (a<b)
    #define isEqual(a,b) (a==b)
    
    
    typedef int ElemType;
    
    typedef struct _Bnode{
    
    	ElemType date;
    	_Bnode *lchild,*rchild;
    
    
    }Bnode,Btree;
    //数据结构算法之二叉树,二叉树就是分成两叉的树
    //
    typedef  Bnode Elemdate;
    
    typedef struct _Stack{
    	Elemdate *base;
    	Elemdate *top;
    
    }Stack;
    
    
    //栈的初始化
    bool initStack(Stack &stack){
    	
       stack.base = new Elemdate[MAX_SIZE];
    
       if(!stack.base){
    
    	printf("栈初始化失败!\n");
    	return false;
    
       }
    
       stack.top = stack.base;
       return true;
    
    }
    
    //获取栈顶元素
    Elemdate* getTop(Stack &stack){
    	return stack.top-1;
    }
    //入栈
    bool PushStack(Stack &stack,Elemdate date){
    
    	if(stack.top-stack.base==MAX_SIZE){
    		
    		printf("栈空间已满,入栈失败!\n");
    		return false;
    	}
    
    	*(stack.top++) = date;
    	return true;
    
    }
    
    //出栈
    bool PopStack(Stack &stack,Elemdate &date){
    	if(stack.base==stack.top){
    		printf("无元素可出栈!\n");
    		return false;
    	}
    	
    
    	date = *(--stack.top);
    	return true;
    
    	}
    
    //判断栈是否为空
    bool isEmpty(Stack&stack){
    	if(stack.base==stack.top){
    		return true;
    
    	}
    
    	return false;
    }
    //判断栈是否已满
    bool isFully(Stack &stack){
    
    	if(stack.top-stack.base==MAX_SIZE){
    		
    		return true;
    	}	
    	return false;
    }
    
    //销毁栈
    void destoyedStack(Stack &stack){
    	
    	if(!&stack) return;
    
    	delete [MAX_SIZE] stack.base;
    
    	stack.base = stack.top = NULL;
    
    
    }
    
    //获取以元素个数
    int getElemdateCount(Stack &stack){
    	
    
    	return (stack.top-stack.base);
    }
     
    
    cs