zoukankan      html  css  js  c++  java
  • 二叉搜索树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;
    		}
    	}
    };
    

      

  • 相关阅读:
    PowerShell笔记
    Windows难民安装docker的注意事项
    minix3使用轻快入门
    gentoo(贱兔) Linux作业系统的基本使用
    Artix Linux作业系统的使用~
    CentOS7搭建sftp
    Hello Wolrd
    Android开发技术周报 Issue#1
    Android开发技术周报 Issue#4
    Android开发技术周报 Issue#3
  • 原文地址:https://www.cnblogs.com/lvcoding/p/7543530.html
Copyright © 2011-2022 走看看