博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Binary Search Tree IN C
阅读量:5894 次
发布时间:2019-06-19

本文共 2601 字,大约阅读时间需要 8 分钟。

hot3.png

#include "stdafx.h"#include
#include
typedef struct Node{ Node* parent; Node* left; Node* right; int key;}node;node* NodeInit(int data){ node* n=(node*)malloc(sizeof(node*)); n->parent = (node*)malloc(sizeof(node*)); n->left = (node*)malloc(sizeof(node*)); n->right = (node*)malloc(sizeof(node*)); n->key = (int)malloc(sizeof(int)); n->parent = NULL; n->left = NULL; n->right = NULL; n->key = data; return n;} void InsertNode(node* root, int data){ if(data < root->key){ if(root->left){ InsertNode(root->left,data); }else{ root->left = NodeInit(data); root->left->parent = root; } }else{ if(root->right){ InsertNode(root->right,data); }else{ root->right = NodeInit(data); root->right->parent = root; } }}void inorderTraversal(node* root){ if(root->left) inorderTraversal(root->left); printf(" %d ",root->key); if(root->right) inorderTraversal(root->right);} node* MaxNode(node* root){ if(root->right) return MaxNode(root->right); else return root;}node* MinNode(node* root){ if(root->left) return MinNode(root->left); else return root;} node* Search(node* root, int data){ if(data == root->key){ return root; }else if(data < root->key){ if(root->left) return Search(root->left,data); else return NULL; }else if(data > root->key){ if(root->right) return Search(root->right,data); else return NULL; }} node* Sucessor(node* n){ node *p; if(n->right){ return MinNode(n->right); }else{ p = n->parent; while(p && p->right == n){ n=p; p=p->parent; } return p; }}void DelNode(node* root,node* n){ node* temp; if(root == n){ temp = Sucessor(n); if(temp == n) printf("No node left in this tree!\n"); DelNode(root,temp); root->key = temp->key; return; } if(n->left==NULL && n->right==NULL){ if(n->parent->left == n) n->parent->left = NULL; else n->parent->right = NULL; }else if(n->left && n->right==NULL){ if(n->parent->left == n){ n->parent->left = n->left; n->left->parent = n->parent; }else{ n->parent->right = n->left; n->left->parent = n->parent; } }else if(n->right && n->left ==NULL){ if(n->parent->left == n){ n->parent->left = n->right; n->right->parent = n->parent; }else{ n->parent->right = n->right; n->right->parent = n->parent; } }else{ temp = Sucessor(n); n->key = temp->key; DelNode(root,temp); }} int main(){ node* root = NodeInit(10); int i,j; for(i=1;i<20;i=i+2){ InsertNode(root,i); inorderTraversal(root); printf("\n"); } DelNode(root,Search(root,10)); inorderTraversal(root); getchar(); return 0;}

转载于:https://my.oschina.net/dongdong2012/blog/115936

你可能感兴趣的文章
python第三站:运动员数据筛选
查看>>
mysql 之 checkpoint和LSN详解
查看>>
我的友情链接
查看>>
Zend Studio 9.0 最新版下载及安装分享
查看>>
centos下yum安装cacti
查看>>
35 个 Java 代码性能优化总结 1-10
查看>>
nginx 反向代理配置
查看>>
sco2012安装部署
查看>>
nagios详解及安装配置实例
查看>>
信息化那点事之:一把手工程
查看>>
【原创】PostgreSQL 位图索引
查看>>
yslow各个指标含义
查看>>
spark编译时的问题
查看>>
.net Page执行顺序
查看>>
格式化字段
查看>>
MySQL 不用 Null 的理由
查看>>
【转】ASP.NET MVC AJAX.BeginForm异步提交和刷新无效
查看>>
决策树
查看>>
Problem 5256 序列变换 【LIS】
查看>>
反射基础
查看>>