zoukankan      html  css  js  c++  java
  • 树-中

    二叉搜索树

    1. 非空左子树的所有键值小于其根结点的键值
    2. 非空右子树的所有键值小于其根结点的键值
    3. 左右子树都是二叉搜素树
    

    二叉搜索树操作函数

    1.Posltion Find(ElementType X, BinTree BST); //从二叉搜索树BST中查找元素X,返回其所在结点的地址
    2.Posltion FindMin(BinTree BST); //从二叉搜素树BST中查找并返回最小元素所在结点的地址
    3.Posltion FindMax(BinTree BST); //从二叉搜索树BST中查找并返回最大元素所在结点的地址
    4.BinTree Insert(ElementType X, BinTree BST);
    5.BinTree Delete(ElementType X, BinTree BST);
    

    Find 查找效率取决于树的高度

    //尾递归
    Position Find(ElementType X, BinTree BST) {
          if (!BST) return NULL;
          if (X > BST->Data )
                return Find(X, BST->Right); // 右子树中查找
          else if(X < BST->Data )
                return Find( X, BST->Left );
          else 
                return BST;    //查找成功,返回找到结点的地址
    }
    // 循环
    Position IterFind(ElementType X, BinTree BST) {
          while (BST) {
                if (X > BST->Data)
                      BST = BST->Right;
                else if ( X <BST->Data )
                      BST = BST->Left;
                else
                      return BST;
          }
          return NULL;
    }
    
    • Find min,max
    Position FindMin (BinTree BST) {
          if (!BST) return NULL;   //空的二叉搜索树
          else if (!BST->Left)
                return BST;    //找到最左叶结点并返回
          else
                return FinMin( BST->Left );
    }
    /*-----------------------------*/
    Position FindMax( BinTree BST ) {
          if (BST)
                while (BST->Right) BST=BST->Right;
          return BST
    }
    
    • insert
    BinTree Insert( ElementType X, BinTree BST ) {
           if( !BST ){
                             //若原树为空,生成并返回一个结点的二叉搜索树
                 BST = malloc(sizeof(struct TreeNode));
                 BST->Data = X;
                 BST->Left = BST->Right = NULL;
           }             //开始找要插入元素的位置
            else if( X < BST->Data )
                    BST->Left = Insert( X, BST->Left);
            else if( X > BST->Data )
                     BST->Right = Insert( X, BST->Right);
     return BST;
    }
    
    • delete
    BinTree Delete( ElementType X, BinTree BST ) { 
          Position Tmp;
          if( !BST ) printf("要删除的元素未找到");
          else if( X < BST->Data )
                BST->Left = Delete( X, BST->Left); /* 左子树递归删除 */
          else if( X > BST->Data )
                BST->Right = Delete( X, BST->Right); /* 右子树递归删除 */
          else if( BST->Left && BST->Right ) { /*被删除结点有左右两个子结点 */
                 Tmp = FindMin( BST->Right );
     /*在右子树中找最小的元素填充删除结点*/
                 BST->Data = Tmp->Data;
                 BST->Right = Delete( BST->Data, BST->Right);
     /*在删除结点的右子树中删除最小元素*/
          } 
          else { /*被删除结点有一个或无子结点*/
                Tmp = BST;
                if( !BST->Left ) /* 有右孩子或无子结点*/
                      BST = BST->Right;
                else if( !BST->Right ) /*有左孩子或无子结点*/
                      BST = BST->Left;
                free( Tmp );
          }
     return BST;
    }
    

    平衡二叉树

  • 相关阅读:
    JavaScript 中的undefined and null 学习
    html5 file upload and form data by ajax
    openresty + lua-resty-weedfs + weedfs + graphicsmagick动态生成缩略图(类似淘宝方案)
    ubuntu10.04 安装oracle server 版 笔记
    windows xp + mysql5.5 + phpmyadmin insert 中文繁體
    (原创)ubuntu 10.04+ruby1.9.2+rails3 安装记录
    ruby簡單的代碼行統計工具
    Ruby中如何复制对象 (deep clone)(转载)
    vi 常用命令使用說明
    一个小公司老板的日常管理日记,希望能让创业的朋友学到东西(转载)
  • 原文地址:https://www.cnblogs.com/Alex3O/p/13423357.html
Copyright © 2011-2022 走看看