zoukankan      html  css  js  c++  java
  • 二叉排序树的实现(部分)

    二叉排序树的实现

    1.编写SearchBST(T, key)与InsertBST(T, key)的伪代码

    1. SearchBST伪代码

      void SearchBST(T,key){
      	if(T为空||T==key) return T;
      	if(T>key)
      		SearchBST(T->lchild,key);
      	else 
      		SearchBST(T->rchild,key);
      }
      
    2. InsertBST伪代码

      void InsertBST(T,key){
      	if(T为空){
      		T=new Node;
      		T=key;
      		T->lchild=NULL;
      		T->rchild=NULL;
      		return true;
      	}else if(T==key) return false;
      	else if(T>key) 
      		InsertBST(T->lchild,key);
      	else
      		InsertBST(T->rchild,key);
      }
      

    2.编写CreateBST(T)的伪代码实现从控制台输入创建BST树。最后使用代码实现。使用“50 30 80 20 40 90 10 25 35 85 23 88”创建BST,并中序输出该BST

    1. CreateBST伪代码

      BSTree CreateBST(T){
      	T=new Node;
      	T->lchild=NULL;
      	T->rchild=NULL;
      	//输入key
      	if(T不空) T=key;
      	while(key!=0){
      		//输入key
      		if(T不空){
      			InsertBST(T,key);
      		}
      	}
              return T;
      }
      
    2. 创建BST树:

      1. 数据类型定义:

        typedef struct BSTNode {
        	int data;
        	struct BSTNode* lchild, * rchild;
        }*BSTree;
        
      2. SearchBST函数:

        BSTree SearchBST(BSTree T, int key) {
        	if (T == NULL || T->data == key) return T;
        	if (T->data > key)
        		return SearchBST(T->lchild, key);
        	else
        		return SearchBST(T->rchild, key);
        }
        
      3. InsertBST函数:

        bool InsertBST(BSTree T, int key) {
        	if (T == NULL){
        		T = new BSTNode;
        		T->data = key;
        		T->lchild = NULL;
        		T->rchild = NULL;
        		return true;
        		}
        	else if (T->data == key) return false;
        	else if (T->data > key)
        		return InsertBST(T->lchild, key);
        	else
        		return InsertBST(T->rchild, key);
        }
        
      4. CreateBST函数:

        BSTree CreateBST(BSTree T) {
        	T = new BSTNode;
        	T->lchild = NULL;
        	T->rchild = NULL;
        	int key;
        	cin >> key;
        	if (T != NULL) T->data = key;
        	while (key != 0) {
        		cin >> key;
        		if (T != NULL) {
        			InsertBST(T, key);
        		}
        	}
                return T;
        }
        
      5. 中序遍历:

        void InOrder(BSTree T) {
        	if (T != NULL) {
        		InOrder(T->lchild);
        		cout << T->data<<" ";
        		InOrder(T->rchild);
        	}
        }
        
      6. main函数:

        void main()
        {
        	BSTree T;
        	T = new BSTNode;
        	int key;
        	CreateBST(T);
        	cout << "中序遍历结果为:" << endl;
        	InOrder(T);
        	cin >> key;
        	SearchBST(T, key);
        	InsertBST(T, key);
        	InOrder(T);
        }
        
      7. 代码运行截图:

    3.编写DeleteBST(T, key)的伪代码实现从T中删除关键字key。

    注意事项及要点:

    删除关键字key首先要判断key所在结点的位置:①叶子结点②仅有左或右子树结点③左右子树都有的结点

    ①叶子结点:找到key后直接删除即可;

    ②仅有左或右子树结点:将T的双亲节点的rchild/lchild指向T的rchild/lchild,即将左右子树结点上移即可;

    ③左右子树都有的结点:方法一:以其前驱替代T结点,然后再删除该前驱结点。前驱是左子树中最大的结点。方法二:用其后继结点替代T结点,然后删除该后继结点。后继是右子树中最小结点。

    DeleteBST伪代码:

    void DeleteBST(T,key){
    	if(T为空) return 0;
    	else{
    		if(T>key)
    			DeleteBST(T->lchild,key);
    		else if(T<key)
    			DeleteBST(T->rchild,key);
    		else{
    			DeleteBST(T);
    			return 1;
    		}
    	}
    }
    
  • 相关阅读:
    mojo 接口示例
    MojoliciousLite: 实时的web框架 概述
    接口返回json
    centos 6.7 perl 版本 This is perl 5, version 22 安装DBI DBD
    centos 6.7 perl 5.22 安装DBD 需要使用老的perl版本
    商业智能改变汽车行业
    商业智能改变汽车行业
    读MBA经历回顾(上)目的决定手段——北漂18年(48)
    perl 升级到5.20版本
    Group Commit of Binary Log
  • 原文地址:https://www.cnblogs.com/hcy420/p/12728725.html
Copyright © 2011-2022 走看看