二叉树-二叉查找树-AVL树

Posted Lunais

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树-二叉查找树-AVL树相关的知识,希望对你有一定的参考价值。

一、二叉树

定义:每个节点都不能有多于两个的儿子的树。

二叉树节点声明:

1 struct treeNode
2 {
3      elementType   element;
4      treeNode      * left;
5      treeNode      * right;               
6 }

应用:

中缀表达式——>后缀表达式(栈的应用)——>表达式树(栈的应用2)

栈的应用2:读取后缀表达式,操作数入栈,遇操作符后,指向栈里前两位元素t1和t2的指针出栈(t1先弹出,作为该操作符的右儿子),并将指向该操作符的指针入栈。

 二、二叉查找树

定义:

结构性:二叉树;

排序性:右子树中最小值  >  X关键字  >  左子树中最大值(对任意节点关键字X均成立)

1、清空树(递归)makeEmpty

 1 searchTree * makeEmpty( searchTree * T)
 2 {
 3      if( T != NULL)
 4     {
 5          makeEmpty( T -> left);
 6          makeEmpty( T -> right);
 7          delete  (T); // 基准情况
 8     }  
 9      return T;  
10 }

 2、Find

searchTree * find( elementType X , searchTree * T)
{
      if( T = NULL)
         return NULL; //非空判断

      if(X < T->element)
         return find (X , T->left);
      else  
      if(X > T->element)
         return find(X , T->right);    
      else
         return T;  //找到元素X
}    

3、findMin  &&  findMax(举一例,(非)递归法,利用其排序性找到相应节点)

递归法:

searchTree * findMax(  searchTree * T)
{
      if( T = NULL)
          return NULL; //非空判断
      else    
      if(T->right == NULL)    
         return T;      //基准情况

      else
         return findMax(T->right);
}  

非递归法:

searchTree * findMax(  searchTree * T)
{
      if( T = NULL)
          return NULL; //非空判断
      else    
      while(T->right != NULL)    
          T = T->right;

          return T;
}  

4、insert

searchTree * insert( elementType X , searchTree * T)
{
      if( T == NULL)
      {
           T = searchTree New(searchTree);
           if(T == NULL)
              cout << "out of space." << endl; 
           else
               {
                    T->element = X;
                    T->left = T->right = NULL;
               }
      }
      else    
           if(X < T->element)
              T->left = insert(X , T->left);  
      else    
           if(X > T->element)
              T->right = insert(X , T->right);   
      
      return T;
}  

 未完待续。。。

 

以上是关于二叉树-二叉查找树-AVL树的主要内容,如果未能解决你的问题,请参考以下文章

二叉树-二叉查找树-AVL树

AVL平衡二叉树,红黑树原理

数据结构二叉树(BT),二叉查找树(BST),平衡二叉树(AVL树)

平衡二叉树(AVL树)

AVL平衡二叉树

BST(二叉搜索树),AVL(平衡二叉树)RBT(红黑树)的区别