BST二叉查找树的实现与操作
2013-05-14 19:25
591 查看
教学视频地址
原文来自猎豹网校
原文来自猎豹网校
#include <stdio.h> #include <stdlib.h> typedef struct Node { int data; struct Node *lchild; struct Node *rchild; }BiTreeNode,*BiTree; BiTree BSTSearch(BiTree T,int x) { BiTreeNode *p; if(T!=NULL) { p=T; while(p!=NULL) { if(p->data==x) return p; else if(x<p->data) p=p->lchild; else if(x>p->data) p=p->rchild; } } return NULL; } int BSTInsert(BiTree *T,int x) { BiTreeNode *p,*cur,*parent=NULL; cur=*T; while(cur!=NULL) { if(cur->data==x) return 0;//已存在关键字为x的节点 parent=cur; if(x<cur->data) cur=cur->lchild; else cur=cur->rchild; } p=(BiTreeNode *)malloc(sizeof(BiTreeNode)); if(!p) exit(-1); p->data=x; p->lchild=NULL; p->rchild=NULL; if(!parent) *T=p; else if(x<parent->data)//如果关键字小于parent指向的节点,则新节点成为parent左孩子 parent->lchild=p; else parent->rchild=p; return 1; } //删除结点操作 void DeleteNode(BiTree *s) { BiTree q,x,y; if(!(*s)->rchild) { q=*s; *s=(*s)->lchild; free(q); } else if(!(*s)->lchild) { q=*s; *s=(*s)->rchild; free(q); } else//如果s左右子树都存在,则使s的直接前驱结点代替s,并使直接前驱结点的左子树成为成为双亲节点的右子树结点。 { x=*s; y=(*s)->lchild; while(y->rchild!=NULL)//查找s的直接前驱结点y为s的直接前驱结点,x为y的双亲结点 { x=y; y=y->rchild; } (*s)->data=y->data;//结点s被y取代 if(x!=*s) x->rchild=y->lchild;//使y的左子树成为x的右子树 else//如果s的左孩子结点不存在右子树 x->lchild=y->lchild; free(y); } } //删除特定结点操作 int BSTDelete(BiTree *T,int x) { if(!*T) return 0; else { if(x==(*T)->data) DeleteNode(T); else if((*T)->data>x) BSTDelete(&(*T)->lchild,x); else BSTDelete(&(*T)->rchild,x); } } void InOrderTraverse(BiTree T) { if(T) { InOrderTraverse(T->lchild); printf("%4d",T->data); InOrderTraverse(T->rchild); } }
相关文章推荐
- 二叉查找树(搜索树)BST各类操作(c++完整实现)
- C语言实现二叉查找树(BST)的基本操作
- 二叉查找树的实现(BST)(转载自http://blog.csdn.net/collonn/article/details/18732079)
- 二叉搜索树(BST,基本操作实现)
- 【算法导论】二叉查找树的操作C++实现
- BST 二叉查找树的实现
- 二叉查找树(二叉排序树)操作大全C++实现
- BST(Binary Search Tree,二叉查找树,二叉排序树)c的实现(部分函数不知如何调用)
- 问题六十四:怎么用C++实现二叉查找树(binary search tree)及其相关操作
- 二叉查找树BST----java实现
- 二叉查找树(二叉排序树)操作大全C++实现
- 二叉查找树的基本操作实现
- 【编程练习】二叉查找树原理及基本操作编程(GNU C实现)
- 非递归实现二叉查找树插入操作
- 数据结构实现之有序符号表BST二叉查找树
- 二叉查找树的各种操作C++实现
- 二叉查找树(BST)的实现(C++)
- 二叉查找树的查找、插入、删除、释放等基本操作的实现(C语言)
- Java实现二叉查找树(BST)
- 【算法设计-二叉搜索树】二叉查找树的操作与实现