• 二叉搜索树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;
    		}
    	}
    };
    

      

  • 相关阅读:
    牛影传说【线段树+BFS序运用】
    动态规划 :传纸条
    CQYZ-OJ P1377 危险的组合
    使用 git 管理你的配置文件
    Exponential Distribution
    初尝 C++ 类设计
    Android刷机的一般步骤
    重装 Linux 记录
    Linux 折腾记录 (非正式)
    最大熵对应的概率分布
  • 原文地址:https://www.cnblogs.com/lvcoding/p/7543530.html
Copyright © 2020-2023  润新知