• 二叉搜索树API


    struct BinarySearchTree {
    	Node* search(Node* node, int key) {
    		while (nil != node && key != node->key) {
    			if (key < node->key) {
    				node = node->leftChild;
    			} else {
    				node = node->rightChild;
    			}
    		}
    		return node;
    	}
    	Node* minimum(Node* node) {
    		while (nil != node->leftChild) {
    			node = node->leftChild;
    		}
    		return node;
    	}
    	Node* maximum(Node* node) {
    		while (nil != node->rightChild) {
    			node = node->rightChild;
    		}
    		return node;
    	}
    	Node* predecessor(Node* node) {
    		if (nil != node->leftChild) {
    			return maximum(node->leftChild);
    		}
    		while (nil != node->parent && node == node->parent->leftChild) {
    			node = node->parent;
    		}
    		return node->parent;
    	}
    	Node* successor(Node* node) {
    		if (nil != node->rightChild) {
    			return minimum(node->rightChild);
    		}
    		while (nil != node->parent && node == node->parent->rightChild) {
    			node = node->parent;
    		}
    		return node->parent;
    	}
    	void insert(Node* node) {
    		Node* father = nil;
    		Node* current = root;
    		while (nil != current) {
    			father = current;
    			if (node->key < current->key) {
    				current = current->leftChild;
    			} else {
    				current = current->rightChild;
    			}
    		}
    		node->parent = father;
    		if (nil == father) {
    			root = node;
    		} else if (node->key < father->key) {
    			father->leftChild = node;
    		} else {
    			father->rightChild = node;
    		}
    	}
    	void transplant(Node* des, Node* src) {
    		if (nil == des->parent) {
    			root = src;
    		} else if (des == des->parent->leftChild) {
    			des->parent->leftChild = src;
    		} else {
    			des->parent->rightChild = src;
    		}
    		if (nil != src) {
    			src->parent = des->parent;
    		}
    	}
    	void del(Node* node) {
    		if (nil == node->leftChild) {
    			transplant(node, node->rightChild);
    		} else if (nil == node->rightChild) {
    			transplant(node, node->leftChild);
    		} else {
    			Node* suc = minimum(node->rightChild);
    			if (suc->parent != node) {
    				transplant(suc, suc->rightChild);
    				suc->rightChild = node->rightChild;
    				suc->rightChild->parent = suc;
    			}
    			transplant(node, suc);
    			suc->leftChild = node->leftChild;
    			suc->leftChild->parent = suc;
    		}
    	}
    };
    

      

  • 相关阅读:
    相关系数
    T检验
    Python模块常用的几种安装方式
    DOM与SAX读取XML方式的不同
    Base64编码
    node.js网页爬虫
    Node.js Express 框架
    Node.js Web 模块
    Node.js GET/POST请求
    Node.js 常用工具
  • 原文地址:https://www.cnblogs.com/lvcoding/p/7543530.html
Copyright © 2020-2023  润新知