zoukankan      html  css  js  c++  java
  • jQuery火箭图标返回顶部代码

    1)二叉顺序树查找操作:(注释内容来自《大话数据结构》)

    2)二叉顺序树插入操作:

    3)二叉顺序树删除操作:

    完整代码如下:

      1 #include "stdafx.h"
      2 #include<iostream>
      3 using namespace std;
      4 typedef int Status;
      5 #define FALSE 0
      6 #define TRUE 1
      7 typedef struct BiTNode
      8 {
      9     int data;//结点数据
     10     struct BiTNode *lchild, *rchild; //左右孩子指针
     11 }BiTNode,*BiTree;
     12 
     13 //递归查找二叉排序树T中是否存在key,
     14 //指针f指向T的双亲,其初始调用值为NULL
     15 //若查找成功,则指针p指向该数据元素结点,并返回TRUE 
     16 //否则指针p指向查找路径上访问的最后一个结点并返回FALSE
     17 Status SearchBST(BiTree T, int key, BiTree f, BiTree *p)
     18 {
     19     if (!T)                       //查找失败
     20     {
     21         *p = f;
     22         return FALSE;
     23     }
     24     else if (key == T->data)      //查找成功
     25     {
     26         *p = T;
     27         return TRUE;
     28     }
     29     else if (key < T->data)
     30         return SearchBST(T->lchild, key, T, p);//在左子树中继续查找
     31     else
     32         return SearchBST(T->rchild, key, T, p);//在右子树中继续查找
     33 }
     34 
     35 Status InsertBST(BiTree *T, int key)
     36 {
     37     BiTree p, s;
     38     if (!SearchBST(*T, key, NULL, &p))//查找失败
     39     {
     40         s = new BiTNode;
     41         s->data = key;
     42         s->lchild = s->rchild = NULL;
     43         if (!p)
     44             *T = s;               //插入s为新的根节点
     45         else if (key < p->data)
     46             p->lchild = s;        //插入s为左孩子
     47         else
     48             p->rchild = s;        //插入s为右孩子
     49     }
     50     else
     51         return FALSE;             // 树中已有关键字相同的结点,不再插入
     52 }
     53 
     54 //从二叉排序树中删除结点p,并重接它的左或右子树
     55 Status Delete(BiTree *p)
     56 {
     57     BiTree q, s;
     58     if ((*p)->rchild == NULL)     //右子树空则只需重接它的左子树(待删结点是叶子也走此分支)
     59     {
     60         q = *p; 
     61         *p = (*p)->lchild; 
     62         free(q);
     63     }
     64     else if ((*p)->lchild == NULL) //只需重接它的右子树
     65     {
     66         q = *p; 
     67         *p = (*p)->rchild; 
     68         free(q);
     69     }
     70     else                          //左右子树均不空
     71     {
     72         q = *p; 
     73         s = (*p)->lchild;
     74         while (s->rchild)         //转左,然后向右到尽头(找待删结点的前驱)
     75         {
     76             q = s;
     77             s = s->rchild;
     78         }
     79         (*p)->data = s->data;     //s指向被删结点的直接前驱(将被删结点前驱的值取代被删结点的值)
     80         if (q != *p)
     81             q->rchild = s->lchild;//重接q的右子树 
     82         else
     83             q->lchild = s->lchild;//重接q的左子树
     84         free(s);
     85     }
     86     return TRUE;
     87 }
     88 
     89 //若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点,
     90 //并返回TRUE;否则返回FALSE
     91 Status DeleteBST(BiTree *T, int key)
     92 {
     93     if (!*T)                      //不存在关键字等于key的数据元素
     94         return FALSE;
     95     else
     96     {
     97         if (key == (*T)->data)    //找到关键字等于key的数据元素
     98             return Delete(T);
     99         else if (key<(*T)->data)
    100             return DeleteBST(&(*T)->lchild, key);
    101         else
    102             return DeleteBST(&(*T)->rchild, key);
    103     }
    104 }
    105 
    106 
    107 int main()
    108 {
    109     int i;
    110     int a[10] = { 62,88,58,47,35,73,51,99,37,93 };
    111     BiTree T = NULL;
    112 
    113     for (i = 0; i<10; i++)
    114     {
    115         InsertBST(&T, a[i]);
    116     }
    117     DeleteBST(&T, 93);
    118     DeleteBST(&T, 47);
    119     cout<<"本样例建议断点跟踪查看二叉排序树结构";
    120     return 0;
    121 }
  • 相关阅读:
    Leetcode题库——40.组合总和II
    (课)阅读笔记3_1
    (课)学习进度报告十
    (课)赛题的需求分析
    (课)阅读笔记2_3
    (课)学习进度报告九
    (课)学习进度报告八
    (tensorflow计算)如何查看tensorflow计算用的是CPU还是GPU
    (课)阅读笔记2_2
    (课)温昱 第三部分Refined Architecture阶段 总结
  • 原文地址:https://www.cnblogs.com/Trojan00/p/9030496.html
Copyright © 2011-2022 走看看